Matlab 将for循环转换为向量表达式
我是MATLAB新手,学习使用向量表达式代替冗长的循环。我有一个片段,我想知道它是否可以写在一个简洁的向量中,如果可以,我将如何修改它Matlab 将for循环转换为向量表达式,matlab,vectorization,date-histogram,Matlab,Vectorization,Date Histogram,我是MATLAB新手,学习使用向量表达式代替冗长的循环。我有一个片段,我想知道它是否可以写在一个简洁的向量中,如果可以,我将如何修改它 for v = I X(i, v) = X(i, v) + length(I(I == v)); end X是1500x200 我是3763x1 我可以被认为是一个常数 我在这里做的就是这个。我包含X的列索引,我想将这些位置增加I中出现特定索引的次数。因此,在这个for循环完成后,X的第I行将包含一个直方图 如果您有任何其他想法或建议来改进我的MATL
for v = I
X(i, v) = X(i, v) + length(I(I == v));
end
X是1500x200
我是3763x1
我可以被认为是一个常数
我在这里做的就是这个。我包含X的列索引,我想将这些位置增加I中出现特定索引的次数。因此,在这个for循环完成后,X的第I行将包含一个直方图
如果您有任何其他想法或建议来改进我的MATLAB编码,我们将不胜感激。以下是几种方法: I=randi10,[50,1];
有一个函数可以用来做你想做的事情。看看accumarray。此外,您的代码似乎有逻辑错误;为什么每次你再次遇到一个元素时,你都要迭代I,然后重复I中元素的重复次数?是的,我也注意到了这个bug,现在正在修复它。我会看看你提到的函数,然后再给你回复。
X = zeros (1, 10);
for Col = 1 : size (X, 2)
X(1, Col) = sum (I == Col);
end
% X = 7 7 3 3 7 4 5 8 1 5
X = zeros (1, 10);
for Col = I.' % the transpose operation is needed to convert to horizontal!
X(1, Col) += 1;
end
% X = 7 7 3 3 7 4 5 8 1 5
X = zeros (1, 10);
X = accumarray (I, ones (size (I)), size (X))
% X = 7 7 3 3 7 4 5 8 1 5