【发布时间】:2014-11-04 05:02:37
【问题描述】:
我有一个二维数组A=zeros(1000,1024)。我想迭代计算第 i 行(i=1-999)的每个值与第 1000 行的值之间的差异。
现在我想循环遍历 1-999 行,计算当前行和第 100 行的差异并将其存储在单独的数据结构中 (B=zeros(999,1024))。之后,我使用另一个 for 循环计算每列的最小值,该循环遍历 B 的列。
您知道更有效、更快的方法吗?
【问题讨论】:
我有一个二维数组A=zeros(1000,1024)。我想迭代计算第 i 行(i=1-999)的每个值与第 1000 行的值之间的差异。
现在我想循环遍历 1-999 行,计算当前行和第 100 行的差异并将其存储在单独的数据结构中 (B=zeros(999,1024))。之后,我使用另一个 for 循环计算每列的最小值,该循环遍历 B 的列。
您知道更有效、更快的方法吗?
【问题讨论】:
试试这个 -
min(bsxfun(@minus,A(1:999,:),A(1000,:)),[],1)
看来你想从最后一行中减去,所以你可以让它通用-
min(bsxfun(@minus,A(1:end-1,:),A(end,:)),[],1)
【讨论】:
min(bsxfun(@minus,A(1:end-1,:),A(end,:)),[],1) 更适合这个问题
,[],1吗?
min 在只有一行的情况下继续工作
这是bsxfun 的经典用例:
M = rand(1000,1024);
V = M(end,:);
MminusV = bsxfun(@minus, M(1:end-1,:), V);
min(MminusV)
【讨论】:
bsxfun 中。现在它是正确的,但和你的一样:)
如果你只想要每列的最小值,你可以通过在最后做减法来节省很多操作:
min(A(1:end-1,:),[],1) - A(end,:)
【讨论】: