Labfans是一个针对大学生、工程师和科研工作者的技术社区。 论坛首页 | 联系我们(Contact Us)
MATLAB爱好者论坛-LabFans.com
返回   MATLAB爱好者论坛-LabFans.com > 其它 > 资料存档
资料存档 资料存档
回复
 
主题工具 显示模式
旧 2019-12-10, 20:48   #1
poster
高级会员
 
注册日期: 2019-11-21
帖子: 3,006
声望力: 66
poster 正向着好的方向发展
帖子 一行中多次增加MATLAB数组的一个值

这是一个关于在同一条语句中多次增加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] )的相同长度。)



回答:

您可以使用功能ACCUMARRAY完成您想做的事情,如下所示:

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];
编辑:如果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

更多&回答...
poster 当前离线   回复时引用此帖
回复


发帖规则
不可以发表新主题
不可以发表回复
不可以上传附件
不可以编辑自己的帖子

启用 BB 代码
论坛禁用 表情符号
论坛启用 [IMG] 代码
论坛启用 HTML 代码



所有时间均为北京时间。现在的时间是 04:51


Powered by vBulletin
版权所有 ©2000 - 2025,Jelsoft Enterprises Ltd.