2013-03-01 3 views
0

Прошло немного времени с тех пор, как я провел матричные операции в MATLAB, поэтому, пожалуйста, простите меня, если это легко разрешимо.MATLAB - Выполнение работы по матричным индексам без петли

У меня есть матрица NxM A, и я хотел бы выполнить операцию с индексами столбцов A. Я знаю, как это сделать, используя цикл for, но так как я использую MATLAB, я бы хотел использовать способность MATLAB быстро выполнять операции над матрицами.

Предположим, у меня есть функция, называемая myFunc. Есть ли способ сделать следующее без for цикла (например, с помощью умножения матриц):

for i=1:M 
    A(:, floor(i*myFunc())) = A(:, i) 

ответ

1

Вы, вероятно, может просто заменить i* на (1:M).*, как это:

A(:, floor((1:M).*myFunc())) = A(:,1:M) 

Обратите внимание, что .* делает поэлементное умножение вместо умножения матриц.

1

ли это?

A(:,floor([1:M]*myFunc())) = A(:,1:M) 

coz Я не знаю, зависит ли ваш myFunc от i.

+0

Как будет функционировать 'myFunc()' на 'i'? –

+0

Если myFunc (i) для разных i возвращает другое значение, нам нужно убедиться, что myFunc ([1: M]) также возвращает вектор. И используйте. *. –

+1

@GeorgeSkoptsov Вопрос не сказал ничего о том, что является параметром и что будет возвращено myFunc(), он может вернуть скаляр или вектор, если скаляр возвращается, тогда нет необходимости. *; если вектор возвращается, необходимо убедиться, что он имеет тот же размер, что и 1: M. Else using. * Приведет к ошибке –