我有一个大数组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];
答案 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);