我知道问题很混乱所以我会试着解释我的问题。我在labview项目中工作,我要做的事情之一是,在询问用户变量的数量和每个变量的数量之后,创建一个包含所有de组合的数组。
让我们知道我们有3个不同的变量,例如: var1,var2,var3
以及每个值的不同值的数量为:
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 x 2 x 4 = 24行
考虑到每个变量的数量和值通常会有所不同,我如何填充这个数组?
我需要用labview来做这件事。 非常感谢提前。
答案 0 :(得分:1)
最简单的示例方法是在彼此内部使用3 for循环。
因此最小的for循环将迭代var3,
medium for循环将迭代var2和
大的for循环将迭代var1。
答案 1 :(得分:1)
您正在寻找的是"笛卡尔产品"。
您可以使用Lists.vi的gmath / Discrete Math.llb / Cartesian产品来完成此任务:
这给出了预期的结果:
它的工作方式是为Cartesian Product VI提供1D数组,详细说明您想要获得笛卡尔积的几个数组的大小,并生成索引相应数组以创建笛卡尔积所需的相应索引。
您需要做的就是构建一个(1D行向量数组)的2D数组,其中包含您想要计算笛卡尔乘积的所有信息,以及显示每个单独行向量大小的1D数组。在LabVIEW中,当您构建一维数组的数组时,列数变为max(len(row_vector_i)),因此为了保留自动交叉产品的长度信息,最好的方法是简单地构建一维数组的集群,其中每个簇都有一个单独的1D数组或行向量。这样可以保留大小信息。
以下是这样的:
我将所有这些保存到一个应该与LV8.6完全兼容的项目中,found here
答案 2 :(得分:0)
如果您可以指定要实现的语言,那么共享python实现会很有帮助。
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])