С наступающим Новым годом! Форум программистов, компьютерный форум, киберфорум
Наши страницы
Matlab
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.50/4: Рейтинг темы: голосов - 4, средняя оценка - 4.50
SpaceQuester
2 / 2 / 0
Регистрация: 19.01.2016
Сообщений: 125
1

Реконструировать матрицу из вектора, инвертируя четные строки

21.11.2016, 13:00. Просмотров 828. Ответов 3
Метки нет (Все метки)

Добрый день!

На вход приходит массив чисел в таком виде (здесь порядковые номера значений, а не сами значения):
Matlab M
1
2
 1| 2| 3| 4| 5| 6| 7| 8|16|15|14|13|12|11|10| 9|17|18|19|20|21|22|23|24|32|31|30|29|28|27|26|25|...
 ---------------------- ======================= ----------------------- =======================
Допустим размер строки = 8, как в данном примере. Мне нужно собрать матрицу из этого вектора, первая строка - первые восемь значений, вторая строка - вторые восемь значений, но перевёрнутые справа налево, и так далее.
Т.е. нужна вот такая матрица:
Matlab M
1
2
3
4
 1| 2| 3| 4| 5| 6| 7| 8| - ------------
 9|10|11|12|13|14|15|16| - ============
17|18|19|20|21|22|23|24| - ------------
25|26|27|28|29|30|31|32| - ============
Если сделать команду:
Matlab M
1
Aall = reshape(input, Xresolution, []);
Получится не совсем то что мне нужно, а именно:
Matlab M
1
2
3
4
 1| 2| 3| 4| 5| 6| 7| 8| - ------------
16|15|14|13|12|11|10| 9| - ============
17|18|19|20|21|22|23|24| - ------------
32|31|30|29|28|27|26|25| - ============
Чётные строки не будут инвертированые.
Как сделать пересборку матрицы с инверсией (переворотом с помощью команды fliplr()) чётных строк?

Спасибо!
0
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
21.11.2016, 13:00
Ответы с готовыми решениями:

Добавление вектора строки в матрицу
Добрый день! Помогите составить алгоритм. Есть матрица полученная расчетным...

Преобразование вектора в матрицу
Здравствуйте! Не нашел, к сожалению, ответа на свой вопрос на форуме. Вопрос...

Преобразование вектора в матрицу
Дня доброго, форумчане! Стоит задача преобразовать вектор N чисел в матрицу...

Сформировать квадратную матрицу А, главная диагональ которой заполнена компонентами вектора x
Здравствуйте,столкнулся с вот такой проблемой,нужно написать программу:...

Умножение вектора-строки на матрицу в Delphi
Помогите пожалуйста написать код для вычисления умножение вектора-строки на...

3
SSC
Эксперт по математике/физике
2714 / 1437 / 422
Регистрация: 09.04.2015
Сообщений: 3,963
21.11.2016, 13:35 2
Лучший ответ Сообщение было отмечено SpaceQuester как решение

Решение

Matlab M
1
2
3
4
5
a=[1 2 3 4 5 6 7 8; 
   16 15 14 13 12 11 10 9; 
   17 18 19 20 21 22 23 24; 
   32 31 30 29 28 27 26 25];
a(2:2:end,:)=fliplr(a(2:2:end,:));
0
SpaceQuester
2 / 2 / 0
Регистрация: 19.01.2016
Сообщений: 125
21.11.2016, 15:19  [ТС] 3
Спасибо большое. Сам дошёл до этого правильного решения.
Добавлено через 12 минут
Теперь в продолжение темы, матрица получилась правильная. Но нужно у нечетных строк теперь отрезать первые 256 позиций, а у четных строк последние 256 позиций.
Т.е. матрица в реальном режиме у меня 768х512, и нужно её проредить до 512х512.
Вариант:
Matlab M
1
2
Aall(1:256, 1:2:end) = [];
Aall(end-256+1:end, 2:2:end) = [];
"правильный", но он не работает, выдаёт ошибку:
Matlab M
1
Subscripted assignment dimension mismatch.
Я прекрасно понимаю почему, т.к. на первой строке нечетные строки становятся короче (512), а размер матрицы всей остаётся прежним (768). Во второй строке скрипта размер строк сравняется и ошибки не будет, но скрипт падает на первой обрезке.
Как здесь лучше сделать?

Добавлено через 50 минут
Понагляднее пример приведу.
Есть матрица:
Matlab M
1
2
3
4
a = [ 1     2     3     4     5     6     7     8;
      9    10    11    12    13    14    15    16;
     17    18    19    20    21    22    23    24;
     25    26    27    28    29    30    31    32];
Как из неё сделать такую матрицу:
Matlab M
1
2
3
4
     [ 3     4     5     6     7     8;
       9    10    11    12    13    14;
      19    20    21    22    23    24;
      25    26    27    28    29    30];
Т.е. у нечетных строк отрезаются первые два элемента, а у четных строк отрезаются последние два элемента.

Спасибо!
0
SSC
Эксперт по математике/физике
2714 / 1437 / 422
Регистрация: 09.04.2015
Сообщений: 3,963
21.11.2016, 15:47 4
Лучший ответ Сообщение было отмечено SpaceQuester как решение

Решение

Matlab M
1
2
3
4
5
6
7
8
9
a=[1 2 3 4 5 6 7 8; 
   16 15 14 13 12 11 10 9; 
   17 18 19 20 21 22 23 24; 
   32 31 30 29 28 27 26 25];
a(2:2:end,:)=fliplr(a(2:2:end,:));
k=2
a(1:2:end,1:end-k)=a(1:2:end,1+k:end);
a(:,end-k+1:end)=[];
a
1
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
21.11.2016, 15:47

Из вектора С сформировать вектор А, содержащий четные элементы вектора С
Всем здравствуйте, у меня возникла проблема с решением задачи связанной с...

Преобразовать исходную матрицу по правилу: четные строки разделить на полученное значение, нечетные оставить без изменения.
Для заданной квадратной матрицы сформировать одномерный массив из ее...

Преобразовать матрицу А(mxn) таким образом чтобы строки с нечетным индексом были упорядочены по убыванию, а четные по возрастанию.
Помогите пожалуйста.Очень надо.


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
4
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2018, vBulletin Solutions, Inc.
Рейтинг@Mail.ru