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

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

新規登録して質問してみよう
ただいま回答率
85.47%
多次元配列

1次元配列内にさらに配列を格納している配列を、多次元配列と呼びます。

Python 3.x

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

配列

配列は、各データの要素(値または変数)が連続的に並べられたデータ構造です。各配列は添え字(INDEX)で識別されています。

Q&A

解決済

2回答

612閲覧

辞書型配列 TypeError: string indices must be integers

iface

総合スコア42

多次元配列

1次元配列内にさらに配列を格納している配列を、多次元配列と呼びます。

Python 3.x

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

配列

配列は、各データの要素(値または変数)が連続的に並べられたデータ構造です。各配列は添え字(INDEX)で識別されています。

0グッド

1クリップ

投稿2023/01/08 13:36

編集2023/01/09 05:08

実現したいこと

以下のような辞書型の配列(dic.txt)を使って、'data'の中身の配列だけを取り出したいです。

... 'data': array([[169, 167, 171, ..., 101, 103, 103], [178, 175, 180, ..., 101, 103, 104], [219, 223, 223, ..., 89, 93, 86], ..., [157, 157, 157, ..., 99, 99, 95], [168, 168, 170, ..., 96, 99, 95], [213, 213, 212, ..., 87, 86, 83]], dtype=uint8) #実際は、一つの配列につき173の要素が含まれています。(省略はされていません。) ...

そのために、以下のようなコードを試してみましたが、

python

1txt = open('dic.txt','r') 2data = txt.read() 3data['data']

このようなエラーが出ました。

TypeError: string indices must be integers

どう解消したら良いでしょうか。

python3使用

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

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

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

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

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

melian

2023/01/08 14:21

もしも、dic.txt の中身が質問文にある通りであれば、Numpy ndarray が途中で省略されている(three dots)ので、復元は不可能になります。
iface

2023/01/09 04:31

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

2023/01/09 04:37

array([[169, 167, 171, ..., 101, 103, 103], となっていますので、171 と 101 の間の数値が省略されてしまっています。ところで、dic.txt の中身は実際にはどうなっているのでしょうか? 問題がなければ先頭の数行を質問文に追記すると、誰かがまともな回答をしてくれるかもしれません。
iface

2023/01/09 05:07

なるほど。 書き方が悪く申し訳ありません。 実際は、dic.txtの中身は省略されておらず、一つの配列に173の要素が含まれていて、長くなると思いまして...で省略しております。 質問を少し改良します。
jbpb0

2023/01/09 11:55

「dic.txt」を作成した時のコードも質問に記載した方が、状況が他人に正確に伝わるように思います
guest

回答2

0

ベストアンサー

pickle形式で保存はしています。

python

1import numpy as np 2import pickle 3 4dic1 = {'data': np.random.random((10, 10))} 5 6# save to file 7with open('dic.pkl', 'wb') as d: 8 pickle.dump(dic1, d) 9 10# load from pickle 11with open('dic.pkl', 'rb') as d: 12 dic2 = pickle.load(d) 13 14print(dic2) 15 16# {'data': array([[0.20170392, 0.90583187, 0.18414392, 0.76081654, 0.20927014, 17# 0.98632377, 0.32868586, 0.37445472, 0.5377807 , 0.8179061 ], 18# [0.79281506, 0.21883116, 0.76909922, 0.41962061, 0.53438414, 19# 0.04514022, 0.61634236, 0.21153664, 0.86448652, 0.52403108], 20# [0.49478467, 0.01790309, 0.66736632, 0.2112874 , 0.32480045, 21# 0.04151275, 0.56353881, 0.80462731, 0.46323398, 0.5435202 ], 22# [0.77760522, 0.39473601, 0.36113428, 0.2359474 , 0.6172297 , 23# 0.40720505, 0.74596252, 0.6661532 , 0.90348978, 0.39357431], 24# [0.98048515, 0.6621397 , 0.05598788, 0.28736663, 0.29562323, 25# 0.18108173, 0.64550732, 0.92116465, 0.53625469, 0.86499978], 26# [0.57147806, 0.93979406, 0.57044045, 0.00937326, 0.96359749, 27# 0.84189956, 0.34475317, 0.10136875, 0.12466955, 0.48294194], 28# [0.95786819, 0.49025857, 0.85633094, 0.6236563 , 0.29051137, 29# 0.3307404 , 0.90773032, 0.21529087, 0.0907701 , 0.31616569], 30# [0.99510191, 0.0319623 , 0.30372174, 0.32812748, 0.01496206, 31# 0.04875215, 0.00139725, 0.44600808, 0.23257516, 0.95688275], 32# [0.83007634, 0.92031762, 0.35088282, 0.97983914, 0.51630558, 33# 0.31611589, 0.15175934, 0.04095449, 0.29034966, 0.90216368], 34# [0.76692667, 0.83758183, 0.35114362, 0.18319582, 0.83881383, 35# 0.37064127, 0.78777244, 0.10778838, 0.23120286, 0.7181491 ]])}

投稿2023/01/09 06:10

編集2023/01/10 03:03
melian

総合スコア19849

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

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

iface

2023/01/09 06:30

回答ありがとうございます。 正規表現のような複雑なことをしないといけないのでしょうか。
melian

2023/01/09 06:37

テキストファイルの一部を切り出す必要がありますので。。。
iface

2023/01/09 07:58

そうなんですね。 私はてっきり'data'を呼び出せばその中身の配列が出力されるのかと思っていました。
melian

2023/01/09 08:06

テキストではなく、pickle や npy(npz) 形式で保存されていればよかったのですが。。
iface

2023/01/09 11:40

pickle形式で保存はしています。 その場合ですとどうなるでしょうか。
melian

2023/01/09 11:49

え、そうだったのですか?でしたら pickle ファイルを読み込めばよいかと思いますが、、、? with open('dic.pkl', 'rb') as f:  data = pickle.load(f)  data = data['data'] ただ、書きながら気がついたのですが、データが numpy ndarray なので読み込みに失敗するかもしれません。
iface

2023/01/09 18:17

はい、こちらのやり方でやってみましたがやはり同じエラーが出ます。
melian

2023/01/10 03:06

適当にデータ(numpy ndarray)を作って pickle 形式で読み書きするコードを記載してみました。手元の Python 3.10.6/Numpy 1.24.1 では問題ない様です。
guest

0

Text

1添字はint型でなければならない。

投稿2023/01/08 13:56

退会済みユーザー

退会済みユーザー

総合スコア0

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.47%

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

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

質問する

関連した質問