[解決済み] Pythonのリストをnumpyの配列にコピーするときに、TypeError: list indices must be integers, not tupleを防ぐにはどうしたらいいですか?
2022-03-10 02:42:33
質問
mean_dataという別の配列のデータを使って、以下のように3つのnumpyの配列/リストを作成しようとしています。
---> 39 R = np.array(mean_data[:,0])
40 P = np.array(mean_data[:,1])
41 Z = np.array(mean_data[:,2])
プログラムを実行しようとすると、エラーが表示されます。
TypeError: list indices must be integers, not tuple
mean_dataのリストは、このサンプルのようになります...。
[6.0, 315.0, 4.8123788544375692e-06],
[6.5, 0.0, 2.259217450023793e-06],
[6.5, 45.0, 9.2823565008402673e-06],
[6.5, 90.0, 8.309270169336028e-06],
[6.5, 135.0, 6.4709418114245381e-05],
[6.5, 180.0, 1.7227922423558414e-05],
[6.5, 225.0, 1.2308522579848724e-05],
[6.5, 270.0, 2.6905672894824344e-05],
[6.5, 315.0, 2.2727114437176048e-05]]
このエラーを防ぐ方法がわかりません。np.arrayとしてmean_dataを作成し、np.appendを使って値を追加してみましたが、それも問題を解決していません。
以下はそのトレースバックです(以前はipythonを使用していました)。
Traceback (most recent call last):
File "polarplot.py", line 36, in <module>
R = np.array(mean_data[:,0])
TypeError: list indices must be integers, not tuple
そして、もう一つの方法として私が試したのは、配列の作成です。
mean_data = np.array([])
for ur, ua in it.product(uradius, uangle):
samepoints = (data[:,0]==ur) & (data[:,1]==ua)
if samepoints.sum() > 1: # check if there is more than one match
np.append(mean_data[ur, ua, np.mean(data[samepoints,-1])])
elif samepoints.sum() == 1:
np.append(mean_data, [ur, ua, data[samepoints,-1]])
その際のトレースバックは
IndexError Traceback (most recent call last)
<ipython-input-3-5268bc25e75e> in <module>()
31 samepoints = (data[:,0]==ur) & (data[:,1]==ua)
32 if samepoints.sum() > 1: # check if there is more than one match
---> 33 np.append(mean_data[ur, ua, np.mean(data[samepoints,-1])])
34 elif samepoints.sum() == 1:
35 np.append(mean_data, [ur, ua, data[samepoints,-1]])
IndexError: invalid index
解決方法は?
変数
mean_data
はネストしたリストです。Pythonではネストしたリストへのアクセスは多次元スライシングではできません、すなわち
mean_data[1,2]
代わりに、次のように書きます。
mean_data[1][2]
.
これは、以下の理由からです。
mean_data[2]
はリストです。さらにインデックスの作成は再帰的に行われます。
mean_data[2]
はリストです。
mean_data[2][0]
はそのリストの最初のインデックスです。
さらに
mean_data[:][0]
は機能しません。
mean_data[:]
は
mean_data
.
解決策としては、以下のように、配列を置き換えるか、元のデータをインポートすることです。
mean_data = np.array(mean_data)
numpyの配列は(MATLABの配列のように、また入れ子リストとは異なり)タプルを使った多次元スライスをサポートします。
関連
-
Python 入出力と高次代入の基礎知識
-
[解決済み】syntaxError: 'continue' がループ内で適切に使用されていない
-
[解決済み】インポートエラー。モジュール名 urllib2 がない
-
[解決済み] NumPyの配列を切り詰めずに、完全に表示するにはどうしたらよいですか?
-
[解決済み] NumPyの配列で、N個の最大値のインデックスを得るには?
-
[解決済み] 割り当て後にリストが予期せず変更されました。その理由と防止策を教えてください。
-
[解決済み] リスト項目の出現回数を数えるにはどうしたらいいですか?
-
[解決済み] print関数の出力をフラッシュする(pythonの出力をバッファリング解除する)にはどうすればよいですか?
-
[解決済み] ローカルにインストールされたPythonモジュールの一覧を取得するにはどうしたらいいですか?
-
[解決済み] NumPyでユークリッド距離はどのように計算できますか?
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
PythonによるLeNetネットワークモデルの学習と予測
-
Python機械学習Githubが8.9Kstarsに達したモデルインタープリタLIME
-
Python jiabaライブラリの使用方法について説明
-
Python百行で韓服サークルの画像クロールを実現する
-
Evidentlyを用いたPythonデータマイニングによる機械学習モデルダッシュボードの作成
-
[解決済み】お使いのCPUは、このTensorFlowバイナリが使用するようにコンパイルされていない命令をサポートしています。AVX AVX2
-
[解決済み】DataFrameのコンストラクタが正しく呼び出されない!エラー
-
[解決済み】ImportError: bs4という名前のモジュールがない(BeautifulSoup)
-
[解決済み】 'numpy.float64' オブジェクトは反復可能ではない
-
[解決済み】ValueError: xとyは同じサイズでなければならない