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

时间:2017-07-19 23:16:22

标签: matlab vectorization date-histogram

我是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编码的想法或建议也将受到赞赏。

1 个答案:

答案 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