我是MATLAB的新手并且学习使用向量表达式而不是冗长的for循环。我有一个片段,我想知道它是否甚至可以用简洁的矢量编写,如果是这样,我将如何修改它。
for v = I
X(i, v) = X(i, v) + length(I(I == v));
end
X
是1500x200
I
是3763x1
i
可以被视为常量
我在这做的是这个。 I
包含X
的列索引,我希望将这些位置按特定索引在I
中出现的次数递增。因此,在完成for循环后,i
X
行将包含直方图。
任何其他改进我的MATLAB编码的想法或建议也将受到赞赏。
答案 0 :(得分:1)
以下是两种方式:
I = randi(10, [50,1]);
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