Это должно дать вам представление
>>> A= [1 2 3 2 1; zeros(3, 5)]';
>>> m= 1== A(:, 1); A(m, 2: 4)= repmat([ 1 -1 -1], sum(m), 1);
>>> m= 2== A(:, 1); A(m, 2: 4)= repmat([-1 1 -1], sum(m), 1);
>>> m= 3== A(:, 1); A(m, 2: 4)= repmat([-1 -1 1], sum(m), 1);
>>> A
A =
1 1 -1 -1
2 -1 1 -1
3 -1 -1 1
2 -1 1 -1
1 1 -1 -1
о том, как довольно просто внедрить этот тип функциональности в ваш код.
Например, как
>>> A= [1 2 3 2 1; zeros(3, 5)]';
>>> I= [1 -1 -1; -1 1 -1; -1 -1 1];
>>> for k= 1: size(I, 1)
> m= k== A(:, 1); A(m, 2: 4)= repmat(I(k, :), sum(m), 1);
> end
Или даже более компактно, как
>>> A= [1 2 3 2 1; zeros(3, 5)]';
>>> I= [1 -1 -1; -1 1 -1; -1 -1 1];
>>> A= [A(:, 1) I(A(:, 1), :)]
A =
1 1 -1 -1
2 -1 1 -1
3 -1 -1 1
2 -1 1 -1
1 1 -1 -1
Что действительно говорит о том, что многие операции Matlab, очевидно, нуждающиеся в repmat
, действительно могут быть обработаны с помощью некоторой «умной» схемы индексации.