Считывание из массива
-
- user
- Сообщения: 97
- Зарегистрирован: 21 окт 2014, 09:39
- Версия LabVIEW: 12
- Контактная информация:
Считывание из массива
Здравствуйте!
Помогите пожалуйста решить такую задачку: имеется массив чисел размером 64. Мне необходимо, допустим, считывать из него значения через каждые три отсчёта 64 раза, т.е. я умножаю счётчик цикла i на требуемое приращение 3. Таким образом я с помощью Index Array могу достать 0, 3, 6, 9 ... 63 элементы. На 63 элементе номер итерации цикла станет равным 21. А мне надо снова начать считывать каждый третий, начав с начала массива, пока счётчик итераций не станет равным 64.
Помогите пожалуйста решить такую задачку: имеется массив чисел размером 64. Мне необходимо, допустим, считывать из него значения через каждые три отсчёта 64 раза, т.е. я умножаю счётчик цикла i на требуемое приращение 3. Таким образом я с помощью Index Array могу достать 0, 3, 6, 9 ... 63 элементы. На 63 элементе номер итерации цикла станет равным 21. А мне надо снова начать считывать каждый третий, начав с начала массива, пока счётчик итераций не станет равным 64.
-
- assistant
- Сообщения: 122
- Зарегистрирован: 09 дек 2014, 10:14
- Версия LabVIEW: 7-2015
- Откуда: Санкт-Петербург
- Контактная информация:
Re: Считывание из массива
Умножая i на 3 никак не получишь 0,3,6.9...
Используйте шифт регистр и реинициализируйте его в конце каждого прохода.
Используйте шифт регистр и реинициализируйте его в конце каждого прохода.
-
- leader
- Сообщения: 932
- Зарегистрирован: 17 янв 2016, 15:02
- Награды: 1
- Версия LabVIEW: 6.1,8.5,20
Re: Считывание из массива
Обратите внимание на функцию Decimate 1d Array
http://zone.ni.com/reference/en-XX/help ... _1d_array/
P.S. rbl в следующем сообщение правильно заметил, что из задания не следует разделение массива на 3 подмассива, а скорее всего требуется его пересортировка по индексам
http://zone.ni.com/reference/en-XX/help ... _1d_array/
P.S. rbl в следующем сообщение правильно заметил, что из задания не следует разделение массива на 3 подмассива, а скорее всего требуется его пересортировка по индексам
Последний раз редактировалось Blackman 14 ноя 2016, 01:14, всего редактировалось 1 раз.
-
- assistant
- Сообщения: 122
- Зарегистрирован: 09 дек 2014, 10:14
- Версия LabVIEW: 7-2015
- Откуда: Санкт-Петербург
- Контактная информация:
Re: Считывание из массива
Насколько я понял из условия задачи, ему нужно сделать это за 3 прохода, а не за 1. Хотя через децимейт конечно делать правильней.Blackman писал(а):Обратите внимание на функцию Decimate 1d Array
http://zone.ni.com/reference/en-XX/help ... _1d_array/
-
- professor
- Сообщения: 3404
- Зарегистрирован: 31 июл 2011, 23:05
- Награды: 2
- Версия LabVIEW: 12-18
- Благодарил (а): 49 раз
- Поблагодарили: 173 раза
- Контактная информация:
Re: Считывание из массива
я вот сильно озадачен, почему умножая i=0,1,2,3... на 3 не получить 0,3,6.9...?rbl писал(а):Умножая i на 3 никак не получишь 0,3,6.9...
Используйте шифт регистр и реинициализируйте его в конце каждого прохода.
-
- assistant
- Сообщения: 122
- Зарегистрирован: 09 дек 2014, 10:14
- Версия LabVIEW: 7-2015
- Откуда: Санкт-Петербург
- Контактная информация:
Re: Считывание из массива
Ваша правда. Видимо думал уже об инкременте через шифт регистр.Artem.spb писал(а):я вот сильно озадачен, почему умножая i=0,1,2,3... на 3 не получить 0,3,6.9...?rbl писал(а):Умножая i на 3 никак не получишь 0,3,6.9...
Используйте шифт регистр и реинициализируйте его в конце каждого прохода.
-
- user
- Сообщения: 97
- Зарегистрирован: 21 окт 2014, 09:39
- Версия LabVIEW: 12
- Контактная информация:
Re: Считывание из массива
Не подскажите как сбрасывать шифт регистр в 0, когда заканчивается массив, и нужно начать счёт с начала?rbl писал(а):Умножая i на 3 никак не получишь 0,3,6.9...
Используйте шифт регистр и реинициализируйте его в конце каждого прохода.
Пока что реализовал так: создал массив со значениями 0,3,6,9...63 , продублировал его 3 раза с помощью build array, преобразовал в 1D и таким образом считал нужные мне отсчёты 64 раза... но это способ заточенный под конкретную задачу, когда размер массива считывания 64. А если будет 2048 или ещё больше, то такой алгоритм не пойдёт..
-
- professor
- Сообщения: 3404
- Зарегистрирован: 31 июл 2011, 23:05
- Награды: 2
- Версия LabVIEW: 12-18
- Благодарил (а): 49 раз
- Поблагодарили: 173 раза
- Контактная информация:
Re: Считывание из массива
что-то я не понимаю сути задачи.
Нужно "по кругу" бегать по элементам массива, при этом брать только каждый n-й?
регистр сбрасывать по условию. В палитре comparison есть функции сравнения и выбора. Так что условие "если y больше X, то 0, иначе y"
Можно ещё использовать деление по модулю: Хi+1 = ( Хi+d ) % P
где d - шаг прореживания (в данном случае 3)
P - период, или размер массива, или что там является критерием начала с нуля (в данном случае 63 и 2048)
% - остаток от деления: 1%63=1, 25%63=25, 64%63=1...
все функции есть в палитрах.
Нужно "по кругу" бегать по элементам массива, при этом брать только каждый n-й?
регистр сбрасывать по условию. В палитре comparison есть функции сравнения и выбора. Так что условие "если y больше X, то 0, иначе y"
Можно ещё использовать деление по модулю: Хi+1 = ( Хi+d ) % P
где d - шаг прореживания (в данном случае 3)
P - период, или размер массива, или что там является критерием начала с нуля (в данном случае 63 и 2048)
% - остаток от деления: 1%63=1, 25%63=25, 64%63=1...
все функции есть в палитрах.
-
Kosist
- expert
- Сообщения: 1236
- Зарегистрирован: 21 фев 2011, 23:44
- Награды: 2
- Версия LabVIEW: 2013-2020
- Благодарил (а): 23 раза
- Поблагодарили: 30 раз
- Контактная информация:
Re: Считывание из массива
В Вашем случае задача вообще не типичная, и я сомневаюсь, что попадется на практике - по-сути, Вы трижды дублируете результат поиска n-ных элементов. Т.е. в таком случае никто не делает проход по массиву три раза. По массиву "проходятся" один раз, а далее работают с полученными результатами. Ведь за один проход массива из 64 элементами, Вы все равно должны получить 22 элемент, т.к. каждый третий элемент встречается там 22 раз, не 64.reed писал(а):но это способ заточенный под конкретную задачу, когда размер массива считывания 64. А если будет 2048 или ещё больше, то такой алгоритм не пойдёт..
Плюс - Вы работаете не с самими данными, а с их индексами. Т.е. Вы ищете "каждый третий элемент", а не "каждое значение, кратное чему-то". Разница существенная, т.е. в первом случае Вам не нужно проходить по всем элементам массива, дабы получить желаемый результат. Вам достаточно сделать вот что: И зачем в этом случае проходить по всему массиву 64 раза, или 2048 раз? (в случае массива с 2048 элементами, каждый 3-й элемент Вы найдете за 682 итерации, не за 2048).
Поэтому переживать за то, что такой алгоритм не пойдет в других ситуациях - не стоит; сама задача чисто учебная, и не практичная.
Хотя, может быть, за ней есть какое-то объяснение - если да, то хотелось бы узнать, если не секрет.
Мы делили апельсин - много наших полегло...
-
- professor
- Сообщения: 3404
- Зарегистрирован: 31 июл 2011, 23:05
- Награды: 2
- Версия LabVIEW: 12-18
- Благодарил (а): 49 раз
- Поблагодарили: 173 раза
- Контактная информация:
Re: Считывание из массива
Kosist, у вас явный минус в программе.
Индексация массива в while loop - не самый рациональный подход (на каждой итерации создаётся новый массив)
В данном случае количество итераций известно заранее и все элементы выдаются в массив подряд, так что разумнее сделать так: Ну и как говорилось ранее, при таком подходе проще децимацию использовать, а потом полученный массив склеить нужное количество раз. но если я правильно понял задачу, тут может быть сложеность в том, что хвост может быть не полным массивом.
Индексация массива в while loop - не самый рациональный подход (на каждой итерации создаётся новый массив)
В данном случае количество итераций известно заранее и все элементы выдаются в массив подряд, так что разумнее сделать так: Ну и как говорилось ранее, при таком подходе проще децимацию использовать, а потом полученный массив склеить нужное количество раз. но если я правильно понял задачу, тут может быть сложеность в том, что хвост может быть не полным массивом.
-
- leader
- Сообщения: 932
- Зарегистрирован: 17 янв 2016, 15:02
- Награды: 1
- Версия LabVIEW: 6.1,8.5,20
Re: Считывание из массива
Для этого и необходимо N (размер массива) проходов, чтобы переставить все элементы массива в новую позицию. а не создавать новый прореженный (decimation) массив.Blackman писал(а): P.S. ... из задания не следует разделение массива на 3 подмассива, а скорее всего требуется его пересортировка по индексам
-
- doctor
- Сообщения: 2211
- Зарегистрирован: 28 июн 2012, 09:32
- Награды: 3
- Версия LabVIEW: 2009..2020
- Откуда: город семи холмов
- Благодарил (а): 27 раз
- Поблагодарили: 27 раз
Re: Считывание из массива
Дециматор выполняет задачу абсолютно идентично вашему коду. т.е. отбрасывает лишние элементы, если размер массива не кратен периоду децимацииArtem.spb писал(а): Ну и как говорилось ранее, при таком подходе проще децимацию использовать, а потом полученный массив склеить нужное количество раз. но если я правильно понял задачу, тут может быть сложеность в том, что хвост может быть не полным массивом.
-
- professor
- Сообщения: 3404
- Зарегистрирован: 31 июл 2011, 23:05
- Награды: 2
- Версия LabVIEW: 12-18
- Благодарил (а): 49 раз
- Поблагодарили: 173 раза
- Контактная информация:
Re: Считывание из массива
я имел ввиду случай, когда надо собрать 3,6 массива. Например.Borjomy_1 писал(а):Дециматор выполняет задачу абсолютно идентично вашему коду. т.е. отбрасывает лишние элементы, если размер массива не кратен периоду децимацииArtem.spb писал(а): Ну и как говорилось ранее, при таком подходе проще децимацию использовать, а потом полученный массив склеить нужное количество раз. но если я правильно понял задачу, тут может быть сложеность в том, что хвост может быть не полным массивом.
массив 60 элементов, т.е. 20 нужных. А на выходе хотим массив из 75 элементов. тогда простой склейкой четырёх прореженных тут не обойтись.
-
- doctor
- Сообщения: 2211
- Зарегистрирован: 28 июн 2012, 09:32
- Награды: 3
- Версия LabVIEW: 2009..2020
- Откуда: город семи холмов
- Благодарил (а): 27 раз
- Поблагодарили: 27 раз
Re: Считывание из массива
Я не понял.Например. массив 60 элементов, т.е. 20 нужных. А на выходе хотим массив из 75 элементов. тогда простой склейкой четырёх прореженных тут не обойтись.
Если данные повторяются, то можно склеить. Если нет, то вопрос в том, откуда их взять.
-
- Похожие темы
- Ответы
- Просмотры
- Последнее сообщение
-
- 5 Ответы
- 986 Просмотры
-
Последнее сообщение seromax
-
- 2 Ответы
- 391 Просмотры
-
Последнее сообщение Sergey Puzanov