我填充与基于功能f
一些值稀疏矩阵生成使用嵌套的循环,像这样:快速(稀疏)矩阵在MATLAB
B = sparse(x, y);
for ix=1:x
for jy=1:y
if f(ix,jy)
B(ix, jy) = 1;
end
end
end
这是做事的最佳和最快的方式matlab,还是有一个优化的方式?
我填充与基于功能f
一些值稀疏矩阵生成使用嵌套的循环,像这样:快速(稀疏)矩阵在MATLAB
B = sparse(x, y);
for ix=1:x
for jy=1:y
if f(ix,jy)
B(ix, jy) = 1;
end
end
end
这是做事的最佳和最快的方式matlab,还是有一个优化的方式?
你可以尝试像以下,这就避免了循环:
如果[is, js] = ind2sub(size(B), 1:numel(B));
fval = arrayfun(f, is, js);
B(find(fval)) = 1;
不知道这将是虽然更快。
如果f
接受向量而不是单个索引,则可跳过arrayfun
。
你知道我怎么能确定哪个更快? – rhombidodecahedron
你为什么不试试看? – 3lectrologos
如果你的函数可以接受向量输入,您可以计算的f
所有值在一杆,然后用sparse
:
[II,JJ] = ndgrid(1:y,1:x);
F = reshape(f(II(:),JJ(:)),x,y); % maybe just f(II,JJ) if f allows it
[ii,jj] = find(F);
B = sparse(ii,jj,1,x,y);
如果你的函数不接受向量,你将不得不通过运行它该循环或使用arrayfun
来生成F(ix,iy) = f(ix,iy);
,然后如上所述使用find
和sparse
。
在没有函数'f'的情况下指出它有点难,特别是因为'x'是行而'y'是问题中的列。一些摆弄索引可能是需要的,但重点是在计算'F'后使用'稀疏'... – chappjc
什么是'f'?函数还是矩阵? – jkshah
功能,抱歉,不清楚。 – rhombidodecahedron
您的函数可以使用矢量输入并输出相同长度的矢量吗? – chappjc