2012-01-13 72 views
5

設A是任意尺寸的(2或3在我的情況下)的陣列。 如何在不事先知道維數的情況下將此陣列變形(重塑爲1D)?如何變平(重塑至1D)任意尺寸的陣列中的Labview

如果我知道維度的數量,可以容易地獲得的元素的總數(通過使用「數組大小」功能的組合),然後使用這個號碼重塑A至1D。 不幸的是,「數組大小」函數本身返回的數組的元素的,其數目等於維度的數目,這使我們回到最初的問題。

我通過創建一個返回3D數組的元素總數(我期望處理的最常見數組類型)的函數(VI)來「解決」了這個問題,這樣我就可以將其作爲Reshape函數的一個參數。問題:即使該算法適用於這樣的數組,它也不會接受二維數組! (似乎在Labview中,數組控件對它們接受的維數是嚴格的,例如在Matlab中就不是這種情況)。

一個很好的解決辦法是將乘以「數組大小」,以快速獲得元件的總數量,給定陣列中的所有元素,而無需在子VI包裹此的簡單方法。總體而言,是不是有一種簡單而有效的方法來解決這個問題?它應該是很標準..

回答

11

我相信這是你在找什麼:

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

你會做:

正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/

這裏是上面的代碼片段:
enter image description here

+0

啊,我是缺少「MultiplyArrayElements」功能!這是我正在尋找的簡單解決方案。非常感謝! – 2012-01-13 13:23:46

2

剛剛獲得數組大小的數組的大小,你會得到的維數...

把這個放到一個子視圖中,將你的未知數組轉換成一個變體,並給出這個變體和維數int o子項。在子維中,使用您的維度數組「Variant to Data」。

+0

謝謝你的提示,我不知道這種方法.. – 2012-01-13 13:24:01