###前提・実現したいこと
二次元配列を一次元配列にして、配列の要素と指定した値が一致した場合、要素の値を変更する。
その後また、二次元配列に変更するといった処理行いたいと思っています。
###発生している問題・エラーメッセージ
ループ処理を内包表記で記述すると
dst = dst.reshape((3, 3)) AttributeError: 'list' object has no attribute 'reshape'
とエラーが出ました。
###該当のソースコード
python
1import cv2 2import numpy as np 3import sys 4 5def main(): 6 max_index = 1 7 dst = np.array([[1, 1, 1], 8 [1, 8, 1], 9 [1, 1, 1]]) 10 11 dst = dst.reshape((-1)) 12 13 dst = [255 if dst[index] == max_index else 0 for index in range(len(dst))] 14 15 """ 16 for index in range(len(dst)): 17 if dst[index] == max_index: 18 dst[index] = 255; 19 else: 20 dst[index] = 0; 21 """ 22 23 dst = dst.reshape((3, 3)) 24 25if __name__ == '__main__': 26 param = sys.argv 27 main()
###試したこと
当初は
dst[index] = [255 if dst[index] == max_index else 0 for index in range(len(dst))]
と記述していたのですが以下のエラーが出たためソースの通りに変更しました。
NameError: name 'index' is not defined
また内包表記で書かなかった場合は実行できたので、その時の配列と内包表記を使った配列を比較すると
内包表記を使わなかった場合は
[255 255 255 255 0 255 255 255 255]
内包表記で配列を変更した場合は
[255, 255, 255, 255, 0, 255, 255, 255, 255]
となりましたがこの違いが何を意味するのかわかりません。理由と解決方法を教えていただけないでしょうか。

回答4件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2018/01/12 01:53