Перевернутый массив

Форум, посвященный общим вопросам, связанным с MATLAB

Модератор: Admin

Pablo-ID13
Пользователь
Сообщения: 38
Зарегистрирован: Ср сен 15, 2010 7:05 pm

Перевернутый массив

Сообщение Pablo-ID13 » Пт авг 12, 2011 10:07 am

Привет всем.
Вопрос в следующем.
Как перевернуть массив в другую сторону средствами матлаб.
При этом не пользуясь циклами.
С циклами все понятно 2 цикла и все.
a=[1 2 3 4 5];
Только учусь...

vvamy
Эксперт
Сообщения: 634
Зарегистрирован: Ср сен 22, 2004 4:49 pm

Re: Перевернутый массив

Сообщение vvamy » Пт авг 12, 2011 10:26 am

Pablo-ID13 писал(а):Привет всем.
Вопрос в следующем.
Как перевернуть массив в другую сторону средствами матлаб.
При этом не пользуясь циклами.
С циклами все понятно 2 цикла и все.
a=[1 2 3 4 5];


b=a(end:-1:1);

Виталий.

Pablo-ID13
Пользователь
Сообщения: 38
Зарегистрирован: Ср сен 15, 2010 7:05 pm

Re: Перевернутый массив

Сообщение Pablo-ID13 » Пт авг 12, 2011 10:28 am

vvamy писал(а):
Pablo-ID13 писал(а):Привет всем.
Вопрос в следующем.
Как перевернуть массив в другую сторону средствами матлаб.
При этом не пользуясь циклами.
С циклами все понятно 2 цикла и все.
a=[1 2 3 4 5];


b=a(end:-1:1);

Виталий.


спасибо, что то про это и не подумал...ступил...
пришлось вспоминать пузырька))

a=[1 2 3 4 5 6 7 8 9];
for i=1:length(a)-1
for j=1:length(a)-1
if a(j)<a(j+1)
tmp=a(j);
a(j)=a(j+1);
a(j+1)=tmp;
end
end
end
Только учусь...

aver
Пользователь
Сообщения: 127
Зарегистрирован: Ср сен 22, 2004 4:49 pm

Re: Перевернутый массив

Сообщение aver » Пт авг 12, 2011 4:34 pm

b=fliplr(a);
С уважением В.А.Аверочкин.

Grizzly
Пользователь
Сообщения: 794
Зарегистрирован: Сб май 28, 2011 2:00 am

Сообщение Grizzly » Пт авг 12, 2011 4:37 pm

Код: Выделить всё

b=a(end:-1:1)

работает гораздо быстрее, чем

Код: Выделить всё

b=fliplr(a)

aver
Пользователь
Сообщения: 127
Зарегистрирован: Ср сен 22, 2004 4:49 pm

Сообщение aver » Пт авг 12, 2011 8:54 pm

fliplr() не меняет структуру матрицы.
С уважением В.А.Аверочкин.

iglin
Эксперт
Сообщения: 1584
Зарегистрирован: Ср сен 22, 2004 4:49 pm

Сообщение iglin » Пт авг 12, 2011 9:40 pm

Функции fliplr и flipud годятся, если известно, что "a" точно вектор-строка или точно вектор-столбец. Если заранее неизвестно, лучше a(end;-1:1).
С.П.Иглин

aver
Пользователь
Сообщения: 127
Зарегистрирован: Ср сен 22, 2004 4:49 pm

Сообщение aver » Сб авг 13, 2011 9:01 am

iglin писал(а):Функции fliplr и flipud годятся, если известно, что "a" точно вектор-строка или точно вектор-столбец. Если заранее неизвестно, лучше a(end;-1:1).


А если точно не вектор-строка или не точно вектор-строка? fliplr (flipud) стандартные функции свойства которых описаны. Вот собственно и всё. А что лучше или хуже это от лукавого.

abobroff
Пользователь
Сообщения: 482
Зарегистрирован: Пн окт 25, 2010 1:21 pm

Сообщение abobroff » Сб авг 13, 2011 7:21 pm

aver писал(а):... что лучше или хуже ...

Код: Выделить всё

open fliplr

Grizzly
Пользователь
Сообщения: 794
Зарегистрирован: Сб май 28, 2011 2:00 am

Сообщение Grizzly » Сб авг 13, 2011 7:37 pm

А как тогда объяснить существенное различие во времени?

Код: Выделить всё

>> x = (0:1:1e8);
>> tic; x = x(end:-1:1); toc
Elapsed time is 0.987804 seconds.
>> tic; x = fliplr(x); toc
Elapsed time is 1.399883 seconds.

abobroff
Пользователь
Сообщения: 482
Зарегистрирован: Пн окт 25, 2010 1:21 pm

Сообщение abobroff » Сб авг 13, 2011 11:39 pm

Grizzly писал(а): ...существенное различие во времени...
я, хотел об этом сказать.

savinov99
Пользователь
Сообщения: 1
Зарегистрирован: Вт ноя 21, 2017 4:32 pm

Re: Перевернутый массив

Сообщение savinov99 » Вт ноя 21, 2017 4:39 pm

Помогите, пожалуйста, нужно в матлабе решить задачу
Получить из массива а1,а2...,а19,а20
Массив а20,а11,а19,а10,а18,а9,а17,а8,а16,а7,а15,а6,а14,а5,а13,а4,а12,а3,а11,а2,а10,а1

Grizzly
Пользователь
Сообщения: 794
Зарегистрирован: Сб май 28, 2011 2:00 am

Re: Перевернутый массив

Сообщение Grizzly » Ср ноя 22, 2017 11:58 am

Как-то так:

Код: Выделить всё

n = 20;
a = 1:n;
b = zeros(1,n+2);
b(1:2:n+1) = a(n:-1:n/2);
b(2:2:n+2) = a(n/2+1:-1:1);

abobroff
Пользователь
Сообщения: 482
Зарегистрирован: Пн окт 25, 2010 1:21 pm

Re: Перевернутый массив

Сообщение abobroff » Вт дек 05, 2017 1:51 pm

Код: Выделить всё

reshape([a(end:-1:10);a(11:-1:1)],1,[])

maria_kipke
Пользователь
Сообщения: 8
Зарегистрирован: Чт окт 05, 2017 4:37 pm

Re: Перевернутый массив

Сообщение maria_kipke » Пт дек 15, 2017 2:42 pm

Grizzly писал(а):А как тогда объяснить существенное различие во времени?


Кривой версией MATLAB, не оптимизированной под конкретную ОС

Код: Выделить всё

>> tic; x = x(end:-1:1); toc
Elapsed time is 0.645279 seconds.
>> tic; x = fliplr(x); toc
Elapsed time is 0.262973 seconds.