将 for 循环转换为向量表达式

Convert for loop into vector expression

我是 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 循环完成后,X 的第 i 行将包含一个直方图。

任何其他改进我的 MATLAB 编码的想法或建议也将不胜感激。

这里有几种方法:

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