NaN Infについて
Show older comments
現在、下記のような計算をしたいと思っています。
data10は18×231250の行列となっており中身は全て0か1のみの数になっています。
その後に
10進数変換をします
例101の場合 (2×1)の0乗+0+(2×1)の2乗
111の場合 (2×1)の0乗+(2×1)の1乗+(2×1)の2乗
このような計算を行って231250こ足し合わせて1×18行列にします(data11)
その後にSCEの計算を行います。(下記スクリプト参照)
しかしNaNやInfというのがdataの中に入ってきPの値が0になってしまいます。
どのようにすれば良いのかスクリプトを送っていただけると助かります。
よろしくお願いいたします。
data10=data9.*2.^(0:231249);
data10tenchi=data10.'
data11=sum(data10tenchi,'omitnan');
%hist(data10);
for i = 0:18
P(i+1)=sum(data11==i)/numel(data11);
end
SCE = sum(-1.*P.*log2(P),'omitnan')
SCE1=SCE/18
2 Comments
Atsushi Ueno
on 1 Dec 2021
2の231250乗はdouble型の最大値1.797693e+308を超える天文学的な数値になる為、Infになってしまいます。
文字でシンボリックに計算する方法を使えばやりたい事が出来ます。
ただ巨大な整数はもはや数としてではなく文字列として扱わなければならないので面倒です。
Symbolic Math Toolboxがあれば数を文字や数式として扱えるのでその点便利に処理してくれます。
Atsushi Ueno
on 1 Dec 2021
Edited: Atsushi Ueno
on 1 Dec 2021
これを使ってdata9 = vpi(randi(2,[18 231250])-1)とdata10 = data9.*2.^(0:231249);を計算させてみましたが、永遠に終わりそうにありません。中身を熟知し計算のさせ方を工夫しないと、目的の計算を早く実行する事が出来ません。
Accepted Answer
More Answers (0)
Categories
Find more on 日付と時刻 in Help Center and File Exchange
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!