2013-05-02 5 views
1

Действительно простой вопрос, я просто не могу обойти это визуальное программирование. У меня есть массив размером 600. Я хочу уменьшить его до размера 10, захватив число каждые 60 индексов массива. Я знаю, как это сделать на обычном языке программирования, но я не могу понять LabView. Может ли кто-нибудь пожалеть и помочь мне? Я привязался, где я нахожусь, но это печально.Уменьшить массив «разрешение» в LabView

enter image description here

+0

Совет. Вам не нужно объявлять «массив» перед добавлением к нему данных. –

ответ

2

То, что вы должны были бы быть хорошим способом сделать это, если требуется массив фиксированного размера. Это было бы важно, если вы работаете на FPGA или вам нужно уменьшить дрожание на цели RT.

Что у вас есть, это не самый простой способ сделать это. Любой простой способ будет накапливать свой новый массив с регистром сдвига, как так:

enter image description here

Как вы можете See-, если индекс является кратным 60, то элемент добавляется в массив. В противном случае в ложном случае массив передается через немодифицированный.

Вы должны знать, что, хотя этот метод намного проще в использовании, он иногда будет вызывать распределение памяти, чтобы увеличить размер накопленного массива. Обычно это не проблема.

9

Поскольку размер известно, это гораздо более эффективным, чтобы сделать что-то вроде этого:

enter image description here

Вы также можете настроить выходной туннель быть условным, что делает код более простым, но не так эффективно, , потому что он должен многократно выделять память. Это на самом деле не соображение, когда у вас есть массив с 10 элементов, но это может быть с большими массивами:

enter image description here

Если у вас возникли проблемы с чем-то вроде этого, вы можете захотеть пройти некоторые учебные пособия, книги или даже курсы.

+0

Он не будет перераспределяться с каждым вызовом, конечно. Он будет выделяться в штырях. Мне больше нравится решение вашего массива с индексом - нет смысла запускать цикл n раз, когда вам нужно только n/60. – Sobachatina

+0

Не совсем. В 2012 году он ведет себя точно так же, как и ваш код, который, я считаю, выделяется при каждом вызове. Я считаю, что в 2013 году он должен вести себя как автоиндексирование из цикла while, который выделяет экспоненциально. В любом случае, это деталь реализации. Я также не сказал бы, что в этом нет никакого смысла - некоторые люди могут найти код более простым, и было бы приемлемо выбрать его по более эффективному коду при определенных обстоятельствах. – Yair

0

Другой способ, которым вы холодны, это использовать примитив decimate 1-d array.

Какая ячейка разбита на n массивы фиксированной длины, где первый массив содержит 0 n 2n 3n ... Хотя это может быть немного большим для n = 60.

Это, вероятно, было бы более полезно, если бы вам понадобилось несколько массивов одинаковой длины, которые только начинались с разных позиций.

0

Основываясь на том, что вы описываете, вам может понадобиться сделать что-то вроде среднего значения каждого из 60 значений вместо того, чтобы произвольно захватывать каждые 60-е, таким образом, вы не показываете много дрожания, если вам удастся захватить выброс , Это может или не может иметь смысл в зависимости от вашего приложения:

enter image description here

enter image description here

0

рассмотреть также проверить с открытым исходным кодом OpenG toolkit. Он имеет функцию под названием «Элементы массива Index 1D» для индексирования массивов, где вы просто даете ей массив и расположение индексов желаемых данных и возвращает требуемый уменьшенный массив.Обратите внимание: если вы начнете работать с чрезвычайно большими массивами, его функции могут быть слишком медленными и/или интенсивными в памяти, но также содержат множество замечательных функций, а не только для манипулирования массивами.

3

Другой подход (без петель):

enter image description here

Я перекроить массив в 2d массив (это не будет выделять новый массив, только размеры будут изменены), то индекс из первой coloumn, чтобы получить каждый 60-й элемент.

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