我有一个向量v1
,其中包含10,000个元素(每个元素的值从0到10),我必须执行一个从0到10的for循环,它通过向量{{1} }。
因此,对于值0,我需要遍历向量v1
的10,000个元素,并在每次当前元素等于0时将结果v1
增加1.然后我必须重复此所有其他可能的值(1到10)。
例如,v2
是一个像v1
这样的向量,它有10,000个元素,我必须知道有多少次出现0,1,...... 10。结果必须是类似[2,3,1,4,0,6,5,3,1,...,5]
的向量,因此它总计为v2 = [500/10000 , 1300/10000, 1000/10000, 700/10000, ..., 400/10000]
。
我得到了以下代码,这仍然是错误的,但我希望你得到我所说的。
10000/10000 = 1
答案 0 :(得分:3)
您所描述的是histogram。在MATLAB中执行此操作的最简单方法是使用内置histcounts
函数,并将bin nbins
的数量指定为11(0,1,...,10):
[v2,~] = histcounts(v1,11);
到目前为止,v2
将包含每个数字的出现次数,即示例中的[500, 1300, ...]
。您当然可以将其除以10�除以numel(v1)
,v1
中的元素数量而不是固定数字!),或者您可以使用{{1}直方图函数的属性并将其设置为Normalization
。这样,计算了相对的观测数。全部放在一起给你
'probability'
答案 1 :(得分:1)
如果我理解正确,你想要计算向量v1中0到10之间的值。这应该可以解决问题:
% Create example vector
v1 = round(10*rand(1,10000));
v2 = zeros(1,11);
for ii = 0:10
% Count number of elements in v1 wich have a value of 'ii' and store the result in v2
v2(ii+1) = numel(find(v1==ii));
end
find(v1==ii)
为您提供v1
的所有条目,其值ii
和numel
计算。由于Matlab索引始于v2
,因此必须使用v2(ii+1)
1
进行审核。
更快的版本计算方法是在评论中使用sum(v1==ii)
代替numel(find(v1==ii))
作为hbaderts。
要检查,您是否正确计算了所有值,您可以运行sum(v2)
,在此示例中应该为您提供10000
。
答案 2 :(得分:1)