我填充與基於功能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