質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.46%
NumPy

NumPyはPythonのプログラミング言語の科学的と数学的なコンピューティングに関する拡張モジュールです。

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

Q&A

1回答

882閲覧

'PrimaryHDU' object is not subscriptable の対処法

_sfgh3k

総合スコア18

NumPy

NumPyはPythonのプログラミング言語の科学的と数学的なコンピューティングに関する拡張モジュールです。

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

0グッド

0クリップ

投稿2020/06/02 16:53

編集2020/06/03 02:38

pythonでfits形式の画像とpng形式の画像の同座標のピクセル値を掛け合わせてリストに入れたいのですが
以下のようなエラーメッセージが表示されました。どのように対処すればよいでしょうか。
----エラーメッセージ--------------------------------------------------------------------------------

img3[i][j] = img1_arr[i][j] * img2_arr[i][j]
TypeError: 'PrimaryHDU' object is not subscriptable


画像のサイズはすでに合わせており、問題ないと思っていたのですが掛け合わせるところに問題があるのでしょうか。
ご教授よろしくお願いします。

python

1import cv2 2import glob 3import numpy as np 4import pyfits 5 6 7cut_name_num=33 #eventxxxx/の部分が後の処理で邪魔なため文字列からカットするためのもの 8img3 = [] 9 10def multi_pic(filename1,filename2): 11 print(filename1[cut_name_num:]) 12 img1 = pyfits.open(filename1) 13 img2 = cv2.imread(filename2,cv2.IMREAD_GRAYSCALE) 14 img1_arr=img1[0].data 15 #print(img1[0].header) #画像情報 16 img1.close() 17 print(type(img1_arr[0][0])) 18 img2_arr = np.asarray(img2).astype(np.float32) #型を合わせる 19 #numpyで扱える配列をつくる 20 print(type(img2_arr[0][0])) 21 print(len(img1_arr),len(img1_arr)) 22 for i in range (len(img1_arr)): 23 for j in range(len(img1_arr)): 24 img3[i][j] = img1_arr[i][j] * img2_arr[i][j] #### ここがエラー該当箇所 25 print(img3) 26 27 28 29 30 31if __name__ == "__main__": 32 event_s = 0 #event0000から数えてevent_s+1枚目から 33 event_e = 1 #event_e枚目まで読み込む 34 path1= XXXXX #fits 35 path2= YYYYY #png 36 files1 = glob.glob(path1)[event_s:event_e] 37 files2 = glob.glob(path2)[event_s:event_e] 38 #files1 = glob.glob(path1) #一括で行う場合はこれを使う 39 #files2 = glob.glob(path2) #一括で行う場合はこれを使う 40 for name1,name2 in zip(files1,files2): 41 multi_pic(name1,name2) 42

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

quickquip

2020/06/03 02:16

エラーとコードが合っていません。(エラーに載っている行がコードのどこにもない) 記載ミスなら編集すればいい話なのですが、そうでないなら実行しているファイルと見ているファイルに食い違いがないかを確認してみては?
_sfgh3k

2020/06/03 02:38

書き間違えていましたので修正しました。 申し訳ありません。
bsdfan

2020/06/04 04:45

img3 = [] で初期化されているので、img3[0][0]の以前に、img3[0]の段階でIndexErrorが発生するはず。 エラーがでたときはは、img3[0]になんかのPrimaryHDUクラスのオブジェクトが入っていそうです。 jupyterでやっているとかなら、一度kernelをリスタートしてエラーを確認しなおしてみては。
_sfgh3k

2020/06/04 14:04

ありがとうございます。 試してみます。
guest

回答1

0

Numpyってarr[y, x]って書きますよね。だから

Python

1img3[i, j] = img1_arr[i, j] * img2_arr[i, j] 2```では?

投稿2020/06/03 00:54

ForestSeo

総合スコア2720

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

_sfgh3k

2020/06/04 04:15

試しましたがiもjも同じ数値までしかループしないので変わりませんでした。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.46%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問