2012-01-13 3 views
5

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

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

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

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

ответ

11

Я верю, что это то, что вы ищете:

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

Вы бы:

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

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

+0

А, мне не хватало функцию «MultiplyArrayElements»! Это простое решение, которое я искал .. Большое вам спасибо! –

2

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

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

+0

Спасибо за отзыв, я не знал об этом методе. –

Смежные вопросы