Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/performance/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Matlab 将for循环转换为向量表达式_Matlab_Vectorization_Date Histogram - Fatal编程技术网

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

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

我是MATLAB新手,学习使用向量表达式代替冗长的循环。我有一个片段,我想知道它是否可以写在一个简洁的向量中,如果可以,我将如何修改它

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