【发布时间】:2018-01-12 12:03:00
【问题描述】:
我有一个包含大约 500000 个元素的大方阵 (refConnect)。 我需要执行这个操作:
tmp = find(referenceCluster == 67);
for j=1:length(tmp)
refConnect(tmp(j),tmp)=1;
end
我想知道是否有一种简单的方法可以将其矢量化,这样我就可以避免永远占用的 for 循环。 谢谢你的帮助。 干杯
【问题讨论】:
-
referenceCluster的大小是多少?是长度为size(refConnect,1)的向量吗? -
我认为循环可以只替换为
refConnect(tmp,tmp)=1;你也可以删除find如下:tmp = referenceCluster==67; refConnect = bsxfun(@times, tmp, tmp.') -
@LuisMendo 我认为您在
bsxfun示例中遗漏了一步,因为您的输出将是逻辑矩阵(尽管由于@times而不是@and而加倍)矩阵,而不是原始矩阵将一些值替换为 1 的矩阵。也适用于其他读者:自 R2016b 以来,这两个语句是等效的:bsxfun(@times, tmp, tmp')和tmp .* tmp' -
是的,路易斯,你说得对。谢谢
-
@Wolfie 你是对的。我假设
refConnect最初是未定义的,如示例中所示
标签: matlab matrix vectorization