这是一个关于在同一语句中多次递增 MATLAB 数组的一个值而无需使用 for 循环的问题。
我将数组设置为:
>> A = [10 20 30];
然后运行:
>> A([1, 1]) = A([1, 1]) + [20 3]
A =
13 20 30
显然 20 被忽略了。但是,我希望将其包括在内,以便:
>> A = [10 20 30];
>> A([1, 1]) = A([1, 1]) + [20, 3]
会给出:
A =
33 20 30
是否有一个函数可以允许以良好的矢量化方式完成此操作?
(实际上,数组的索引将包含多个索引,因此可以是[1 1 2 2 1 1 1 1 3 3 3]
等等,用一个数字数组来递增([20, 3]
上面)相同的长度。)
您想要做的事情可以使用该功能来完成ACCUARRAY http://www.mathworks.com/help/techdoc/ref/accumarray.html,像这样:
A = [10 20 30]; %# Starting array
index = [1 2 2 1]; %# Indices for increments
increment = [20 10 10 3]; %# Value of increments
A = accumarray([1:numel(A) index].',[A increment]); %'# Accumulate starting
%# values and increments
这个例子的输出应该是:
A = [33 40 30];
EDIT: If A
是一个很大的值数组,并且只需添加一些增量,以下内容可能比上面的计算效率更高:
B = accumarray(index.',increment); %'# Accumulate the increments
nzIndex = (B ~= 0); %# Find the indices of the non-zero increments
A(nzIndex) = A(nzIndex)+B(nzIndex); %# Add the non-zero increments
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)