Есть ли способ векторизовать этот цикл FOR, который я знаю о gallery ("circul", y) благодаря пользователю carandraug
но это только сместит ячейку к следующей соседней ячейке, я также попытался toeplitz, но это не работало).
Я пытаюсь настроить смещение, которое выполняется в примере кода с помощью circshift и переменной shift_over.
Переменная y_new - это вывод, который я пытаюсь получить, но без использования цикла FOR в примере (можно ли этот цикл FOR векторизовать).
Обратите внимание: Числа, которые используются в этом примере, являются лишь примером того, что реальный массив будет представлять собой голосовые / звуковые сигналы длительностью 30-60 секунд (поэтому массив y_new может быть большим) и не будет быть последовательными числами, такими как 1,2,3,4,5.
tic
y=[1:5];
[rw col]= size(y); %get size to create zero'd array
y_new= zeros(max(rw,col),max(rw,col)); %zero fill new array for speed
shift_over=-2; %cell amount to shift over
for aa=1:length(y)
if aa==1
y_new(aa,:)=y; %starts with original array
else
y_new(aa,:)=circshift(y,[1,(aa-1)*shift_over]); %
endif
end
y_new
fprintf('\nfinally Done-elapsed time -%4.4fsec- or -%4.4fmins- or -%4.4fhours-\n',toc,toc/60,toc/3600);
y_new =
1 2 3 4 5
3 4 5 1 2
5 1 2 3 4
2 3 4 5 1
4 5 1 2 3
Ps: я использую Octave 4.2.2 Ubuntu 18.04 64bit.