【发布时间】:2018-09-26 10:29:22
【问题描述】:
如果我有一个矩阵
A=rand(50,4);
还有一个范围值矩阵,例如
range=[1 10 15 30 45 50];
我想计算范围矩阵上所有 A 列中的最小值及其索引。例如
for i=1 :numel(range)-1
[value index]= find(min(A(range(i):range(i+1),[],1)
if i>1
index=index+ range(i)+1; % indx# was calculated onlyin a
% range of array and not for
%whole array.Updated here
end
B_ind(i,:)=index;
B_val(i,:)=value;
end
如何在不使用循环方法的情况下为range(i:i+1) 获取min(A) 的索引?
简单地说,矩阵'B'应该是这样的
B(1,column 1:4)=index of min(A (1:10)) in every column
B(2,column 1:4)=index of min(A (11:15)) in every column
B(3,column 1:4)=index of min(A (16:30)) in every column
等等……
我的问题是如何在没有“for 循环”的情况下做到这一点?
【问题讨论】:
-
你需要
index=index+range(i)-1;,而不是+1。 -
为什么要避免循环?这是您代码中的瓶颈吗?我认为你的方法非常好!
-
是的@CrisLuengo,你是对的。感谢您指出错误。我同意。我想遵循矢量化方法,因为循环需要更多时间。实际上我的数据非常大。
-
循环在 MATLAB 中不再缓慢。一些矢量化代码仍然比相应的循环快,但它们不再像过去那样快 100 倍或 1000 倍,而是快了 2 倍。如果矢量化需要大的中间矩阵或复杂的索引,现在很多矢量化代码实际上速度较慢。