Как сгладить (преобразовать в 1D) массив произвольной размерности в Labview - PullRequest
6 голосов
/ 13 января 2012

Пусть A - массив произвольной размерности (2 или 3 в моем случае). Как я могу сгладить (преобразовать в 1D) этот массив, не зная заранее количество измерений?

Если бы я знал количество измерений, я мог бы легко получить общее количество элементов (используя комбинацию функции «Размер массива»), а затем изменить форму от A до 1D, используя это число. К сожалению, сама функция «Размер массива» возвращает массив, число элементов которого равно числу измерений, что возвращает нас к исходной проблеме.

Я «решил» проблему, создав функцию (VI), которая возвращает общее количество элементов трехмерного массива (наиболее распространенный тип массивов, который я ожидаю обработать), так что я могу дать это как аргумент функции Reshape. Проблема: он не примет 2D-массив, хотя алгоритм будет работать с таким массивом! (похоже, что в Labview элементы управления массивами строго зависят от количества измерений, которые они принимают, например, в Matlab это не так).

Хорошим решением было бы простой способ умножить все элементы массива, заданного параметром «Размер массива», чтобы быстро получить общее количество элементов, без необходимости переносить это в подпункт VI. В целом, не существует ли простого и эффективного способа решения этой проблемы? Это должно быть вполне стандартным ..

Ответы [ 2 ]

12 голосов
/ 13 января 2012

Полагаю, это то, что вы ищете:

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/

Вот фрагмент кода выше:
enter image description here

2 голосов
/ 13 января 2012

Просто получите размер массива размера массива, и вы получите количество измерений ...

Чтобы поместить это в subvi, преобразуйте ваш неизвестный массив в вариант и передайте этот вариант и число измерений в subvi. Внутри подпункта «Вариант данных» содержится массив вашего измерения.

...