设A是任意维数的数组(在我的例子中为2或3)。 如何在不事先知道尺寸数量的情况下展平(重塑为1D)此阵列?
如果我知道尺寸的数量,我可以很容易地获得元素的总数(通过使用“数组大小”功能的组合),然后使用此数字重塑A到1D。 不幸的是,“数组大小”函数本身返回一个数组,其元素数量等于维度数,这使我们回到最初的问题。
我通过创建一个函数(VI)“解决”了这个问题,该函数返回了3D数组的元素总数(我希望处理的最常见的数组类型),所以我可以将它作为一个重塑函数的参数。问题:它不会接受2D数组,即使算法适用于这样的数组! (似乎在Labview中,数组控件对它们接受的维数是严格的,例如在Matlab中并非如此)。
一个很好的解决方案是将“数组大小”给出的数组的所有元素相乘以快速获取元素总数的简单方法,而不必将其包装在子VI中。 总的来说,是不是有一种简单有效的方法来解决这个问题?它应该是非常标准的..
答案 0 :(得分:12)
我相信这就是你要找的东西:
http://zone.ni.com/reference/en-XX/help/371361E-01/glang/reshape_array/
你会这样做:
n-DimInputArray - > ArraySize - > 1D_SizesOUT
返回包含所有数组维度大小的1D数组。
然后你去:
1D_SizeOUT - > MultiplyArrayElements - > NumberOfElementsIn_n-DimInputArray
此值作为ReshapeArray的尺寸大小 - 已完成。
http://zone.ni.com/reference/en-XX/help/371361E-01/glang/array_size/
http://zone.ni.com/reference/en-XX/help/371361E-01/glang/multiply_array_elements/
以下是上述代码的片段:
答案 1 :(得分:2)
只需获取数组大小的数组大小,您就可以获得维数...
要将其放入子目录中,请将未知数组转换为变量,并将此变量和维数提供给子目录。在subvi中,“Variant to Data”包含您的维度数组。