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

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

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

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

Python 3.x

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

Q&A

解決済

1回答

588閲覧

pyhton配列のスライスのエラー<too many indices for array>

YNN35

総合スコア22

NumPy

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

Python 3.x

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

0グッド

0クリップ

投稿2019/07/29 07:23

前提・実現したいこと

pythonでscikitのデータセットから取り出したリストをndarrayに変換してスライスで一部を取り出そうと思っているのですがエラーが発生してしまいうまくできません。解決策としてどうすれば良いのでしょうか。

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

colaboratory

1IndexError Traceback (most recent call last) 2 3<ipython-input-1-b90196b600e7> in <module>() 4 4 digits = datasets.load_digits() 5 5 digits = np.array(digits) 6----> 6 c = digits[2:4,2:4,:] 7 7 print(c) 8 9IndexError: too many indices for array

pycharm

1Traceback (most recent call last): 2 File "C:\Program Files\JetBrains\PyCharm Community Edition 2019.1.3\helpers\pydev\pydevd.py", line 1758, in <module> 3 main() 4 File "C:\Program Files\JetBrains\PyCharm Community Edition 2019.1.3\helpers\pydev\pydevd.py", line 1752, in main 5 globals = debugger.run(setup['file'], None, None, is_module) 6 File "C:\Program Files\JetBrains\PyCharm Community Edition 2019.1.3\helpers\pydev\pydevd.py", line 1147, in run 7 pydev_imports.execfile(file, globals, locals) # execute the script 8 File "C:\Program Files\JetBrains\PyCharm Community Edition 2019.1.3\helpers\pydev\_pydev_imps\_pydev_execfile.py", line 18, in execfile 9 exec(compile(contents+"\n", file, 'exec'), glob, loc) 10 File "C:/Users/noriy/PycharmProjects/hello1/main.py", line 13, in <module> 11 c = digits[2:4,2:4,:] 12IndexError: too many indices for array

arrayの要素数が多すぎるのでしょうか?
なおdatasetsのdigitsの概要は以下のようになります

Classes10
Samples per class~180
Samples total1797
Dimensionality64
Featuresintegers 0-16

該当のソースコード

python

1import numpy as np 2from sklearn import datasets 3 4digits = datasets.load_digits() 5digits = np.array(digits) 6c = digits[2:4,2:4,:] 7print(c)

試したこと

以下のように.imagesをつけることにより指定の文字を取り出すことにより配列の大きさを小さくしたらなおりました。なのでアレイの要素数が多すぎたのでしょうか?上のエラーを避けるにはやはり要素を小さくカットしてそこからスライスをしてあとからくっつけるというようなことをしなければならないのいでしょうか?

python

1digits = datasets.load_digits() 2digits = np.array(digits.images[1])#<----ここを変更 3c = digits[2:4,2:4]#データも二次元になるので二次元に 4print(c)

補足情報

python3.6
numpy
sckit-learn

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

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

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

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

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

guest

回答1

0

ベストアンサー

sklearn.datasets.load_digits — scikit-learn 0.21.2 documentation

txt

1Dictionary-like object, the interesting attributes are: ‘data’, 2the data to learn, ‘images’, the images corresponding to each sample, ‘target’, the classification labels for each sample, ‘target_names’, 3the meaning of the labels, and ‘DESCR’, the full description of the dataset.

load_digits() の返り値は公式リファレンスに記載の通り、画像やラベルなどの情報が辞書形式で格納されているオブジェクトです。
なので、画像を取り出したい場合はまず digits.images で画像一覧を取得してください。
これは形状が (サンプル数, 8, 8) の numpy 配列になります。

サンプルの一部をスライスで取り出したい場合、digits.images[スライスの記述] で取り出してください。

python

1import matplotlib.pyplot as plt 2import numpy as np 3from sklearn import datasets 4 5digits = datasets.load_digits() 6 7imgs = digits.images 8labels = digits.target 9print(imgs.shape, labels.shape) # (1797, 8, 8) (1797,) 10 11# 最初の25枚を描画する。 12first_25_imgs = imgs[:25] # 先頭25枚 13 14fig = plt.figure(figsize=(7, 7), facecolor="w") 15for i in range(25): 16 ax = fig.add_subplot(5, 5, i + 1) 17 ax.imshow(first_25_imgs[i], cmap="gray") 18 ax.set_axis_off() 19plt.show()

イメージ説明

投稿2019/07/29 08:15

tiitoi

総合スコア21956

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問