2012-01-13 8 views
5

Niech A będzie tablicą o dowolnym wymiarze (2 lub 3 w moim przypadku). Jak mogę spłaszczyć (przekształcić do 1D) tę tablicę bez znajomości z góry liczby wymiarów?Jak spłaszczyć (przekształcić do 1D) tablicę dowolnego wymiaru w Labview

Gdybym znał liczbę wymiarów, mógłbym łatwo uzyskać całkowitą liczbę elementów (za pomocą kombinacji funkcji "Rozmiar matrycy"), a następnie zmienić kształt A na 1D, używając tego numeru. Niestety, funkcja "Rozmiar matrycy" sama zwraca tablicę, której liczba elementów jest równa liczbie wymiarów, co prowadzi nas z powrotem do początkowego problemu.

Mam "rozwiązany" problem, tworząc funkcję (VI), która zwraca całkowitą liczbę elementów tablicy 3D (najbardziej typowy rodzaj tablic, które mam zamiar obsłużyć), tak, że mogę dać to jako argument funkcji przekształcenia. Problem: nie zaakceptuje tablicy 2D, mimo że algorytm działałby z taką tablicą! (Wydaje się, że w Labview, kontrole tablicowe są ściśle związane z liczbą akceptowanych wymiarów, co nie ma miejsca w przypadku Matlaba na przykład).

Przyjemnym rozwiązaniem byłby prosty sposób na pomnożenie wszystkich elementów tablicy podanej w "Rozmiar tablicy", aby szybko uzyskać całkowitą liczbę elementów, bez konieczności zawijania w pod VI. Ogólnie rzecz biorąc, czy nie istnieje prosty i skuteczny sposób rozwiązania tego problemu? Powinno być dość standardowy ..

Odpowiedz

11

wierzę to jest to, czego szukasz:

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

byłoby to zrobić:

n-DimInputArray -> ArraySize -> 1D_SizesOUT

Powoduje to zwrócenie tablicy 1D zawierającej rozmiary wszystkich wymiarów tablicy.

Następnie przejdź:

1D_SizeOUT -> MultiplyArrayElements -> NumberOfElementsIn_n-DimInputArray

Wartość ta idzie w jak wielkość wymiar ReshapeArray - gotowe.

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/

Oto fragment powyższego kodu:
enter image description here

+0

Ah, brakowało mi funkcji "MultiplyArrayElements"! To jest proste rozwiązanie, którego szukałem .. Dziękuję bardzo! –

2

Wystarczy uzyskać rozmiaru tablicy o wielkości tablicy i dostaniesz liczbę wymiarów ...

Aby umieścić to w subwiście, przekształć nieznaną tablicę w wariant i podaj ten wariant oraz liczbę wymiarów int o subvi. Wewnątrz subvi "Wariant do danych" z tablicą wymiaru.

+0

Dziękuję za cynk, nie wiedziałem o tej metodzie .. –

Powiązane problemy