2016-08-01 7 views
1

Я знаю, что вопрос запутан, поэтому я попытаюсь объяснить свою проблему. Я работаю в проекте labview, и одна из вещей, которую мне нужно сделать, - спросить у пользователя количество переменных и количество разных значений для каждого из них, создать массив со всеми комбинациями.Как заполнить и массив, чьи строки были комбинациями и столбцами для разных групп? (Labview)

Позволяет supose у нас есть 3 различных переменных, например: var1, var2, var3

и количество diffent значений для каждого из них:

var1 -> 0, 1, 2 
var2 -> 11, 22 
var3 -> 55, 66, 77, 88 

Таким образом, результирующий массив должен быть как это:

0 11 55 
0 11 66 
0 11 77 
0 22 55 
0 22 66 
... 

этот путь до 3 х 2 х 4 = 24 строк

Принимая во внимание, что количество переменных и значений каждого из них обычно будет различным, как я могу заполнить этот массив?

Мне нужно, как это сделать с помощью labview. Большое спасибо заранее.

ответ

1

Слово, которое вы ищете, «декартово произведение».

Вы можете использовать gmath/Discrete Math.llb/декартово произведение Lists.vi для достижения этой цели:

labview code

Это дает желаемый результат:

result

Путь это работает, вы питаете Cartesian Product VI 1D-массив, детализируя размер нескольких массивов, на которые вы хотите получить декартово произведение, и генерирует соответствующие индексы, необходимые для индексации уважаемых e массивов для создания декартова произведения.

Все, что вам нужно сделать, это построить 2D-массив (1D массив векторов строк), который содержит всю информацию, которую вы хотите вычислить декартово произведение, и 1D-массив, который показывает размер каждого отдельного вектора строки. В LabVIEW, когда вы создаете массив из массивов 1D, количество столбцов становится max (len (row_vector_i)), поэтому для сохранения этой информации о длине для автоматического кросс-продукта наилучшим способом является просто построить 1D-массив кластеров, где каждый кластер имеет индивидуальный 1D-массив или вектор-строку. Это сохраняет информацию о размере.

Вот как это выглядит:

cluster auto

Я сохранил все это в проект, который должен быть полностью совместим с LV8.6, found here

+0

Это, кажется, хорошее решение, я Попробуем. Единственная проблема заключается в том, что число переменных не всегда равно 3, но также может составлять 1,2,4,5 .... Единственное решение, которое я нахожу, - создать условную структуру с 5 или 6 «если», от 2 до 6 или 7 vars, и в каждое условие «если» разместите решение, которое вы предложили для 3 переменных. Спасибо. –

+0

У меня была большая проблема, моя версия LV - 8,6 и у нее нет Cartesian Product. –

+0

Я создал пример и добавил его на главный пост. Картазианский продукт VI учитывает списки переменной длины, используя его «количество элементов в каждом списке». – ijustlovemath

1

Самый простой способ - использовать 3 для петель внутри друг друга.

Так наименьший цикл будет итерацию var3,

среда для цикла будет итерацию var2 и

большой цикл будет итерации var1.

0

Sharing реализацию питона, поможет, если вы можете указать язык вы реализуете в.

def array_3d(var1,var2,var3): 
    a = [] 
    for i in range(len(var1)): 
    for j in range(len(var2)): 
     for k in range(len(var3)): 
     a.append([var1[i],var2[j],var3[k]]) 
    print a 


array_3d([1,2,3],[10,20,30],[300,400,500,600])