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

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

新規登録して質問してみよう
ただいま回答率
85.31%
Python 3.x

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

Python

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

Q&A

解決済

3回答

3108閲覧

書き換えのできない配列を書き換え可能にする方法

assemble

総合スコア11

Python 3.x

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

Python

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

0グッド

0クリップ

投稿2020/09/29 10:07

編集2020/09/30 06:04

jpeg2000の画像から取得した値を配列にいれ、それをあるしきい値を元に変換したい。

画像から取得した配列はWRITEABLEがFalesであり、フラグも変えられませんでした。
そこで元の配列を元にコピーを作成し、WRITEABLEをTrueにしようとしましたがうまく行きませんでした。

発生している問題・エラーメッセージ

AttributeError: 'builtin_function_or_method' object has no attribute 'deepcopy'

該当のソースコード

Python3

1import os 2import zipfile 3import matplotlib.pyplot as plt 4import numpy as np 5import copy 6from PIL import Image 7 8#画像pass 9path_b4 = ('S2A_MSIL2A_20190504T014701_N0211_R017_T53SLV_20190504T043621.SAFE/GRANULE/L2A_T53SLV_A020177_20190504T014655/IMG_DATA/R10m/T53SLV_20190504T014701_B04_10m.jp2') 10 11#画像の読み込み 12im = Image.open(path_b4) 13 14#画像をarrayに変換 15im_list = np.asarray(im) 16 17#複製 18im_mimic = im_list.copy.deepcopy 19 20im_copy.flags.writeable = True 21

試したこと

フラグの書き換えを行いましたが変えることができませんでした。
またコピーを行うと新しい配列としてフラグを変えられるため
copy,deepcopyを試しましたが上記のエラーが出てしまいました。

補足情報(FW/ツールのバージョンなど)

ubuntuで動かしています。
画像の配列は10980*10980ピクセルです。

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

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

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

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

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

tiitoi

2020/09/29 10:13

im_list をそのまま書き換えできませんか?書き換えるのに以下のようなことをする必要はとくにないように思えます。 im_mimic = im_list.copy.deepcopy im_copy.flags.writeable = True
meg_

2020/09/29 10:23

コードは「コードの挿入」で記入してください。
assemble

2020/09/30 05:58

「発生しているエラー」でも書いたとおり、im_listの取得した配列はWRITEABLEがFalesになっており書き換えができません。ですのでコピーを行い書き換えができる新しい配列を作成しようとしています。
tiitoi

2020/09/30 06:01

だとしたら、np.asarray() でなく、np.array() を使えば書き換えできるようにならないでしょうか?
assemble

2020/09/30 06:18

np.asarray() をnp.array() に変えてみましたが、同じエラー文が表示されました。
tiitoi

2020/09/30 06:22

回答にコードを書きましたが、asarray() を array() になおして、そのあとの im_mimic = im_list.copy.deepcopy im_copy.flags.writeable = True は不要です
guest

回答3

0

ベストアンサー

asarray() で ndarray に変換しているため、書き換え不可になっています。

python

1from PIL import Image 2import numpy as np 3 4img = Image.open("sample.jpg") 5 6x = np.asarray(img) 7x[0, 0, 0] = 1 8# ValueError: assignment destination is read-only

array() で変換すれば、コピーとして作成されるため、書き換えできます。

python

1from PIL import Image 2import numpy as np 3 4img = Image.open("sample.jpg") 5 6x = np.array(img) 7x[0, 0, 0] = 1 # OK

投稿2020/09/30 06:21

tiitoi

総合スコア21960

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

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

assemble

2020/09/30 06:40

忘れていました。 書き直したところ無事に動かすことができました! ありがとうございました!
guest

0

画像から取得した値を配列にいれ、それをあるしきい値を元に変換したい。

こういうことでしょうか?

Python

1from PIL import Image 2import numpy as np 3 4im = Image.open(r'C:\Users\Flower.jpg') 5a = np.asarray(im) 6print(a[0, 0]) 7# [19 14 10] 8a = np.where(a < 15, -1, 100) 9print(a[0, 0]) 10# [100 -1 -1]

投稿2020/09/29 11:01

meg_

総合スコア10923

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

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

assemble

2020/09/30 06:41

他の方との解答と組み合わせることでこの方法でもできました。 ありがとうございました!
meg_

2020/09/30 07:55

当方の環境では回答のコードでエラーは出ませんでしたが、質問者さんの方ではエラーが出ますか?
assemble

2020/10/06 06:06

頂いたコードのみで行ったところエラーは出ませんでした。 自分のコードと組み合わせるときにミスをしてしまったようです。
guest

0

処理が正しかどうかはさておき、

python

1im_mimic = im_list.copy.deepcopy

という記述の im_list.copy は im_listが持つcopyメソッドそのものを指していますので、それの.deepcopy を参照しようとすれば、「その関数やメソッドにはdeepcopyという属性はありません」と言われます。

関数/メソッドは、()を後ろに付けることで呼び出すことができますので、、

python

1im_mimic = im_list.copy().deepcopy()

とするのが目的に合うでしょう。

投稿2020/09/29 10:23

TakaiY

総合スコア14394

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

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

assemble

2020/09/30 06:13

試してみましたが、エラー文 AttributeError: 'numpy.ndarray' object has no attribute 'deepcopy' となり、できませんでした。
lehshell

2020/09/30 06:41

import copy ... im_mimic = im_list.copy().deepcopy() ではなく import copy ... im_mimic = copy.deepcopy(im_list) ですね。
assemble

2020/10/06 06:06

ありがとうございます!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.31%

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

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

質問する

関連した質問