0 / 0 / 0
Регистрация: 20.07.2017
Сообщений: 25
|
|
1 | |
Поиск граничных значений в массиве и вывод группы значений по условию29.08.2019, 20:44. Показов 2733. Ответов 9
Метки нет (Все метки)
Здравствуйте. Запутался при решении своей же задачи. Имеется два массива чисел: 1 и 2. В каждом по 100000 значений. Нужно найти все ячейки массива 1, в которых значения изменяются. Затем вывести номера этих ячеек в таблицу J. Предположим, у одной такой ячейки номер (индекс) x. Тогда на последнем этапе нужно вывести значения массива 2 с индексами ((x-n)x-1)), где n можно задать. И так для каждой ячейки, в которой изменяется значение массива 1. Например, в массиве 1 значения [3 3 3 5 5 4], а в массиве 2 значения [1 1 1 6 6 5]. Я хочу в результате иметь при n=2 таблицу, в которой в первой колонке по имени 5 будет [1 1], во второй колонке по имени 4 будет [6 6]. Отдельно таблица J с номерами ячеек, в которых значения массива 1 изменялись, то есть [4 6].
0
|
29.08.2019, 20:44 | |
Ответы с готовыми решениями:
9
Поиск и вывод значений по условию Поиск граничных значений случайной величины Поиск и вывод нескольких значений по условию Поиск значений по условию |
483 / 427 / 205
Регистрация: 04.03.2011
Сообщений: 1,259
|
|
29.08.2019, 21:03 | 2 |
[3 3 3 5 5 4]
[0 0 0 4 0 6] -> [4 6] Я правильно понимаю? Добавлено через 4 минуты Я уверен, команды diff() и find() справятся с этим
1
|
0 / 0 / 0
Регистрация: 20.07.2017
Сообщений: 25
|
|
29.08.2019, 21:24 [ТС] | 3 |
Спасибо за быстрый ответ! Это вторая часть задачи, если можно так сказать. У меня загвоздка и с решением первой части - как искать в массиве ячейки, в которых значение изменяется? Пробовал вводить переменную с индексом на шаг вперед, брал частное, пытался ставить условие поиска: если частное не равно 1, выводить номер (индекс) ячейки. Но потерпел полную неудачу - плохо знаю.
0
|
483 / 427 / 205
Регистрация: 04.03.2011
Сообщений: 1,259
|
|
29.08.2019, 22:00 | 4 |
анекдот?
0
|
0 / 0 / 0
Регистрация: 20.07.2017
Сообщений: 25
|
|
29.08.2019, 22:58 [ТС] | 5 |
Извините, я вас не понял. Поясните, пожалуйста, другими словами. Что конкретно непонятно:
команда diff даст разность соседних ячеек, но это мне не подходит. Еще раз приведу пример моей задачи: в массиве 1 значения [3 3 3 5 5 4], в массиве 2 значения [1 1 1 6 6 5]. Индексы значений будут соответственно [1 2 3 4 5 6]. То есть номера колонок, если рассматривать массивы как таблицы с одной строкой и шестью колонками. Предположим, что n - это количество ячеек, предыдущих изменяющей ячейке. Особенность в том, что изменяющие значение ячейки я ищу в массиве 1, а выводить n значений хочу из массива 2 по индексам, полученным в результате поиска по массиву 1. Тогда при n=2 я хочу в результате иметь получить таблицу, в которой в первой колонке (по имени 5) будут значения: 1 1 а во второй колонке (по имени 4) будут: 6 6 Отдельно я хочу выводить таблицу (назову ее для удобства таблица J) с номерами ячеек, в которых значения массива 1 изменялись, то есть [4 6]. Тут 4 и 6 - это не значения, а номера колонок. Как в этой задаче мне поможет комбинация команд diff и find? Как я вас понял, вы предлагаете командой diff находить разности соседних ячеек, а командой find искать получившиеся все ненулевые ячейки. Но я не понял, как затем вытащить индексы (номера колонок) этих ненулевых ячеек, а затем по ним (как по адресам) достать соответствующие значения из массива 2? И делать это для всех 100000 значений, чтобы в итоге получить большую таблицу с обозначенными условиями. Добавлено через 12 минут Может быть, другой пример поможет понять, чего же я хочу. Даны два массива (в каждом одна строка и 13 столбцов): [11 14 12 15 15 15 17 17 12 13 13 13 13] - массив 1; [13.0934 18.0022 13.9978 19.0001 19.0001 19.0001 24.2321 24.2321 13.9978 14.0444 14.0444 14.0444 14.0444] - массив 2. Требуется составить две таблицы. Первую таблицу вида: Первая колонка (по имени 14) Nn 13.0934 Вторая колонка (по имени 12) 13.0934 18.0022 Третья колонка (по имени 15) 18.0022 13.0934 Четвертая колонка (по имени 17) 19.0001 19.0001 Пятая колонка (по имени 12) 24.2321 24.2321 Шестая колонка (по имени 13) 24.2321 13.9978 Вторую таблицу вида: Первая колонка (по имени ИНДЕКСЫ ИЗМЕНЕНИЙ МАССИВА 1) 2 3 4 7 9 10 Добавлено через 5 минут Как я вижу решение (могу быть сильно неправ и решение далеко не оптимальное, хочется лучше): 1) Поиск в массиве 1 ячеек, в которых значения массива 1 изменяются; 2) Запись индексов найденных ячеек в отдельную таблицу; 2) Поиск в массиве 2 значений ячеек по записанным индексам и извлечение этих значений в отдельную таблицу с указанием измененного значения в качестве имени соответствующей колонки.
0
|
483 / 427 / 205
Регистрация: 04.03.2011
Сообщений: 1,259
|
||||||
29.08.2019, 23:11 | 6 | |||||
Командой diff() можете найти изменение, а find() найдет индексы
Если индексы IX, а для каждого хотим (x-n : x-1)
твоя моя понимать?
1
|
3390 / 1913 / 571
Регистрация: 09.04.2015
Сообщений: 5,365
|
||||||
30.08.2019, 09:47 | 7 | |||||
Посмотрите
1
|
0 / 0 / 0
Регистрация: 20.07.2017
Сообщений: 25
|
|
30.08.2019, 11:03 [ТС] | 8 |
Спасибо большое за помощь, nuHrBuH!
Я пробовал так: A=xlsread('CQI_100k'); B=xlsread('SINR_100k'); C=diff(A); D=find(C==0); E=find(C~=0); n=(4:85225); F=[ D(1)-10 D(1)-9 D(1)-8 D(1)-7 D(1)-6 D(1)-5 D(1)-4 D(1)-3 D(1)-2 D(1)-1 D(1) D(2)-10 D(2)-9 D(2)-8 D(2)-7 D(2)-6 D(2)-5 D(2)-4 D(2)-3 D(2)-2 D(2)-1 D(2) D(3)-10 D(3)-9 D(3)-8 D(3)-7 D(3)-6 D(3)-5 D(3)-4 D(3)-3 D(3)-2 D(3)-1 D(3) ... D(n)-10 D(n)-9 D(n)-8 D(n)-7 D(n)-6 D(n)-5 D(n)-4 D(n)-3 D(n)-2 D(n)-1 D(n)]; G=uint16(F); Но как дальше заполнить F значениями из B - не знал. SSC, Ваш код работает - и он проще! Спасибо, SSC. Относительно условия, что делать при выходе за границу массива m1: я хотел бы возвращать нули. Маленький вопрос - можно ли как-то вывести переменную (скажем, N), которая будет задавать количество предыдущих значений? Например, чтобы выбирать, выводить в третьем столбце Т1 так (при N=2): 18.0022 13.0934 или так (при N=3): 13.0934 18.0022 13.0934
0
|
3390 / 1913 / 571
Регистрация: 09.04.2015
Сообщений: 5,365
|
||||||
30.08.2019, 11:25 | 9 | |||||
Сообщение было отмечено narrowbuilder как решение
Решение
Вот вариант
1
|
0 / 0 / 0
Регистрация: 20.07.2017
Сообщений: 25
|
|
30.08.2019, 17:40 [ТС] | 10 |
SSC, большое спасибо, все работает!
Добавлено через 5 часов 34 минуты Еще один вопрос - пытаюсь преобразовать входные данные из таблицы с 2 строками и 5 столбцами (назовем ее массивом X): 1 2 3 4 5 6 7 8 9 1 к виду 2 строки 1 столбец: [1,2,3,4,5] [6,7,8,9,1] Использую num2cell: X = xlsread('test.xlsx'); Y = num2cell(X,1) Но эта команда возвращает таблицу вида: 2х1 double 2х1 double 2х1 double 2х1 double 2х1 double В каждой ячейке которой столбцы. Например, в первой ячейке: 1 6 Добавлено через 20 минут Разобрался сам. K = xlsread('123.xlsx'); T = table(K); U = table2cell(T)
0
|
30.08.2019, 17:40 | |
30.08.2019, 17:40 | |
Помогаю со студенческими работами здесь
10
Проверка граничных значений Поиск определенных значений по условию в DataGridView Перенос значений по условию, очистка значений по условию Вывести множество значений функции, удовлетворяющих условию, и подсчитать количество остальных значений Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |