Matlab:在指定位置插入多个元素

时间:2016-10-23 12:45:29

标签: arrays matlab insert

我有一个大数组A,我希望在特定位置插入值。这些值和位置存储在数组B中。我可以使用索引来执行此分配,即不使用for - 循环或arrayfun吗?

示例:

% target array
A = [NaN NaN;
     NaN NaN];

%    r c value
B = [1 1 17; 
     1 2 13; 
     2 2 21];

% ?? Mystery operation ??

% Desired result:

A = [17   13;
     NaN  21];

2 个答案:

答案 0 :(得分:3)

这是一个矢量化解决方案:

accumarray(B(:,1:2),B(:,3),[],[],NaN)

参考accumarray的文档,我们可以使用签名accumarray(subs,val,sz,fun,fillval),前两个参数是subs= [row and column indices]val=value of matrix以及第五个参数fillval

  

使用标量值subs

填充fillval中任何下标未引用的A的所有元素

所以我们使用NaN作为第5个参数。

如果您想创建稀疏矩阵,可以使用签名accumarray(subs,val,sz,fun,fillval,issparse)

答案 1 :(得分:2)

解决方案

另一种方法可能是使用 linear indices

% Define data
A = [NaN NaN; 
     NaN NaN];
B = [1 1 17; 
     1 2 13; 
     2 2 21];
% Create linear indices for matrix A, with rows from B(:, 1) and columns from B(:, 2)
indices = sub2ind(size(A), B(:, 1), B(:, 2));
% Replace the data in A with values from B(:, 3)
A(indices) = B(:, 3);