確率

6 次查看(过去 30 天)
sz
sz 2021-10-27
评论: Akira Agata 2021-10-27
現在1×100のデータがありその中身は、0~7のいずれかの数字になっています。
100個の数字のうち0の箇所がいくつかあります。
0の数字がある割合は100個のうちいくつか
1の数字の割合・・・これを7個分の割合を出したいです。
例)1 2 2 0 2 3 0 2 2 1
上記の2の割合は0.5
可能でしたらスクリプトを共有していただきたいです。
よろしくお願いいたします。
下記のdata1は1×100のデータ出すまでのスクリプトになります。
rng(1,'philox')
X = randi([0 1], 3, 3, 100);
% 対角部分は同じ数字になるようにする
a = tril(ones(3), -1) == 1;
a = repmat(a, 1, 1, 100);
X(a) = 0;
X = X + permute(X,[2 1 3]);
%対角線部分は全て1とする
a = eye(3) == 1;
a = repmat(a, 1, 1, 100);
X(a) = 1;
A = reshape(permute(X, [2 1 3]), 1, [], 100);
B = squeeze(A)';
data=B(:,[4,7,8]);
data1= data * 2.^(0:2).'

采纳的回答

Hernia Baby
Hernia Baby 2021-10-27
インデックスから個数を出して、それを全体で割ってあげると可能です。
前準備
rng(1,'philox')
X = randi([0 1], 3, 3, 100);
% 対角部分は同じ数字になるようにする
a = tril(ones(3), -1) == 1;
a = repmat(a, 1, 1, 100);
X(a) = 0;
X = X + permute(X,[2 1 3]);
%対角線部分は全て1とする
a = eye(3) == 1;
a = repmat(a, 1, 1, 100);
X(a) = 1;
A = reshape(permute(X, [2 1 3]), 1, [], 100);
B = squeeze(A)';
data=B(:,[4,7,8]);
data1= data * 2.^(0:2).';
計算
for i = 0:7
P(i+1)=sum(data1==i)/numel(data1);
end
P
P = 1×8
0.1500 0.1400 0.1000 0.1000 0.1900 0.1000 0.1300 0.0900
  1 个评论
Akira Agata
Akira Agata 2021-10-27
+1
関数 accumarray をうまく使って、以下のようにしても可能です。
count = accumarray(data1+1,1);
P = count/numel(data1);
>> P
P =
0.1500
0.1400
0.1000
0.1000
0.1900
0.1000
0.1300
0.0900

请先登录,再进行评论。

更多回答(0 个)

类别

Help CenterFile Exchange 中查找有关 数値型 的更多信息

标签

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!