
画像の輝度値が保存されたtxtファイルを開いて、輝度値のヒストグラムを表示したいのですがrubyの配列の操作に戸惑っています。histgram[value] += 1のvalueが不確定なのでnilになってしまいます。何か良い解決方法はありますか?
image.txtは
輝度値 その他の情報となっているためsplit[0]で輝度値部分のみを抽出しています。
f = open('image.txt')
color = Array.new
histogram = Array.new
correlation = Array.new
n = 0
while c = f.gets
color[n] = c.split[0].to_i
value = c.split[0].to_i
histogram[value] += 1
if(n>1)
correlation[value + 50 * color[n-1] ] += 1
end
n+=1
end
f.close
A 回答 (2件)
- 最新から表示
- 回答順に表示
No.2
- 回答日時:
要素の上限が分かっていることがほとんどなので、No.1の回答で良いのですが、ちょっと違った方法を紹介します。
histogram[value]=histogram[value] ? histogram[value] +1 : 1
histogram[value]を条件判断し、nilの時には1にするものです。まあ当たり前と言えば当たり前の方法です。
もうひとつ、
histogram[value] ||= 0
histogram[value] += 1
最初の行を追加します。これはnilの場合(falseも)に0を代入するというもので初期化ができます。
これらの場合いずれにしても代入していない要素はnilになりますので、後で0にしてやらないと不都合があるかも知れません。
グラフを書くところまで考えるなら、rsrubyでRの機能を使うのが便利なように思います。
gnuplotよりも高度なグラフが書きやすいのと、統計計算が簡単にできるので私はもっぱらrsrubyを使っています。
(Rをダウンロードして、gemでrsrubyをインストールします)
No.1
- 回答日時:
こんにちは
> histgram[value] += 1のvalueが不確定なのでnilになってしまいます。
多分 histgram[]の各要素の初期値がnilなので+1ができないという意味だと思うのですが、初期値を決めてあげれば良いです。(詳しくは参照URLをご確認くださいね)
size = 10
histogram = Array.new(size, 0)
p histogram[0] # => 0
p histogram[9] # => 0
p histogram[10] # => nil
それとも、もしかして value = c.split[0].to_iが上手く数値に変換されないという意味でしょうか?
その場合は、image.txtの問題のある行を提示していただいた方が良いと思います。
参考URL:http://doc.ruby-lang.org/ja/1.9.3/class/Array.html
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
value内に変数を入れたい
-
hiddenのvalueの値を変えたい
-
テキストボックスに入力された...
-
値を初期化したい。
-
プルダウン選択時、既に入力済...
-
HP内に検索エンジンを置きたい...
-
[JavaScript+<select>]最初から...
-
HTML、Javascriptでトグルボタ...
-
javascriptでhiddenに二次元配...
-
JavaScriptでランダムで画像を...
-
【jsp/Java】チェックボックス...
-
return trueとreturn falseの用...
-
【jQuery】input nameの文字列...
-
Selectボックスの幅を自動で広...
-
<JavaScript>tableタグを入力不...
-
ラジオボタンでクリックした値...
-
onchangeイベントを強制的に発...
-
<input>の選択肢をプルダウンメ...
-
ページ間で変数を保持したい
-
tbody要素のinnerHTMLが書き換...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
value内に変数を入れたい
-
hiddenのvalueの値を変えたい
-
テキストボックスに入力された...
-
3つ以上の数値の中から、最も...
-
javascriptでhiddenに二次元配...
-
どのボタンがクリックされたの...
-
複数のsubmitボタンで押された...
-
これはAnd演算に変えてよいか?
-
VB.NET DateTimeの型について
-
HP内に検索エンジンを置きたい...
-
UART通信の取説で,left floati...
-
setIntervalの間隔を途中で変更...
-
jsで、配列内の文章を改行する...
-
ラジオボタンとテキストを同時...
-
[JavaScript+<select>]最初から...
-
プルダウンメニューリンクを新...
-
selectboxのoptionタグのvalue...
-
ラジオボタンを押して計算結果...
-
ループで連続したフォームの値...
-
[C#]連想配列の中に配列を入れたい
おすすめ情報