0

我是 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第 th 行将X包含一个直方图。

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

4

1 回答 1

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
于 2017-07-19T23:41:32.383 回答