6

让 A 是一个任意维度的数组(在我的例子中是 2 或 3)。如何在不事先知道维数的情况下展平(重塑为 1D)这个数组?

如果我知道维数,我可以很容易地获得元素的总数(通过使用“数组大小”函数的组合),然后使用这个数字将 A 重塑为 1D。不幸的是,“数组大小”函数本身返回了一个数组,其元素数等于维数,这让我们回到了最初的问题。

我通过创建一个函数 (VI) “解决”了这个问题,该函数返回 3D 数组(我期望处理的最常见的数组类型)的元素总数,因此我可以将其作为参数提供给重塑功能。问题:它不会接受二维数组,即使算法可以使用这样的数组!(似乎在 Labview 中,数组控件对它们接受的维数非常严格,例如在 Matlab 中并非如此)。

一个不错的解决方案是将“数组大小”给定的数组的所有元素相乘以快速获得元素总数,而无需将其包装在子 VI 中。总的来说,没有简单有效的方法来解决这个问题吗?应该挺标准的。。

4

2 回答 2

12

我相信这就是您要寻找的:

http://zone.ni.com/reference/en-XX/help/371361E-01/glang/reshape_array/

你会这样做:

n-DimInputArray --> ArraySize --> 1D_SizesOUT

这将返回一个包含所有数组维度大小的一维数组。

然后你去:

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/

这是上面代码的片段:
在此处输入图像描述

于 2012-01-13T12:57:37.493 回答
2

只需获取数组大小的数组大小,您将获得维数...

要将其放入 subvi 中,请将您的未知数组转换为变体,并将此变体和维度数提供给 subvi。在 subvi 中,“Variant to Data”带有您的维度数组。

于 2012-01-13T12:59:16.833 回答