Mostrar comentarios más antiguos
現在、下記のような計算をしたいと思っています。
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 comentarios
Atsushi Ueno
el 1 de Dic. de 2021
2の231250乗はdouble型の最大値1.797693e+308を超える天文学的な数値になる為、Infになってしまいます。
文字でシンボリックに計算する方法を使えばやりたい事が出来ます。
ただ巨大な整数はもはや数としてではなく文字列として扱わなければならないので面倒です。
Symbolic Math Toolboxがあれば数を文字や数式として扱えるのでその点便利に処理してくれます。
Atsushi Ueno
el 1 de Dic. de 2021
Editada: Atsushi Ueno
el 1 de Dic. de 2021
これを使ってdata9 = vpi(randi(2,[18 231250])-1)とdata10 = data9.*2.^(0:231249);を計算させてみましたが、永遠に終わりそうにありません。中身を熟知し計算のさせ方を工夫しないと、目的の計算を早く実行する事が出来ません。
Respuesta aceptada
Más respuestas (0)
Categorías
Más información sobre 日付と時刻 en Centro de ayuda y File Exchange.
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!