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

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

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

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

Python

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

Q&A

1回答

951閲覧

8次元配列から1次元配列に変換

kentaronagata

総合スコア25

多次元配列

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

Python

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

0グッド

0クリップ

投稿2021/11/21 06:58

編集2021/11/21 08:06

import

1import tkinter.filedialog as fd 2import PIL.Image 3import PIL.ImageTk 4import sklearn.datasets 5import sklearn.svm 6import numpy #画像を数値リストに変換する時に必要 7 8def imageToData(filename): 9 #画像を8*8のグレースケールに変換 10 11 grayImage = PIL.Image.open(filename).convert("L")#色がついていると誤認識してしまうため白黒にしている。 12 grayImage = grayImage.resize((8,8),PIL.Image.ANTIALIAS) 13 14 #画像をラベルに表示 15 #dispImage = PIL.ImageTk.PhotoImage(grayImage) 16 dispImage = PIL.ImageTk.PhotoImage(grayImage.resize((300,300)))#縮小したものを拡大している。 17 imageLabel.configure(image =dispImage) 18 imageLabel.image=dispImage 19 20 #数値リストに変換する処理の追加 21 numImage = numpy.asarray(grayImage,dtype = float) 22 numImage = numpy.floor(16-16*(numImage/256)) 23 numImage = numImage.flatten() 24 25 return numImage 26 27def predictDigits(data): 28 #常習用データを読み込む 29 digits = sklearn.datasets.load_digits() 30 31 #機械学習を行う 32 clf = sklearn.svm.SVC(gamma = 0.001) 33 clf.fit(digits.data,digits.target) 34 35 #予測結果を表示する 36 n = clf.predict([data]) 37 textLabel.configure(text="この画像は"+str(n)+"です。") 38 39 40def openFile(): 41 fpath= fd.askopenfilename() 42 if fpath: 43 #画像ファイルを数値リストに変換する。 44 data = imageToData(fpath) 45 46 47root = tk.Tk() 48root.geometry("400x400") 49btn = tk.Button(root,text="ファイルを開く",command = openFile) 50imageLabel = tk.Label() 51 52btn.pack() 53imageLabel.pack() 54 55#予測結果を表示するラベル 56textLabel1= tk.Label(text="手書きの数字を認識します!") 57textLabel1.pack() 58tk.mainloop() 59コード

現在、python勉強中で画像の数値を予測するプログラムを作成しています。
数値リストに変換する処理の部分で、

コード #数値リストに変換する処理の追加 numImage = numpy.asarray(grayImage,dtype = float) numImage = numpy.floor(16-16*(numImage/256)) numImage = numImage.flatten()

三つ目の8次元のリストを1次元配列に変換するのは何故なのでしょうか?
8次元のままreturnを返しても処理はできないのでしょうか?

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

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

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

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

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

guest

回答1

0

python

1 data = imageToData(fpath)

のdataを使っている部分が書かれていないので個別には何とも答えられませんが、一般的に言うと
そのdataを使うライブラリが1次元の配列を使うのでしょう。

ソースコードの省略した部分があればもう少し調べることはできます。

投稿2021/11/21 07:20

ppaul

総合スコア24670

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

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

ppaul

2021/11/21 07:21

なお、numImageは8次元ではなく2次元のndarrayです。
kentaronagata

2021/11/21 08:10

ソースコードを改めて記入いたしました。 すみません、もう一度確認してもらえないでしょうか? 画像を数値リストに変換した際に、[ ]が縦に8列配列されていたので8次元配列だと思い込んでいました。
jbpb0

2021/11/21 10:43 編集

質問者さん その部分を、 numImage = numpy.asarray(grayImage,dtype = float) print(numImage.shape) numImage = numpy.floor(16-16*(numImage/256)) print(numImage.shape) numImage = numImage.flatten() と、「print(numImage.shape)」を各行の間に挿入して、実行してみてください そうしたら、「numImage」のshapeが表示されますので、それを確認してください 2回とも (8, 8) と表示されると思います その数値がいくつ並んでいるのか、が次元です 上記は「8」が二つ並んでるので、2次元です 【追記】 (8, 8) は、「縦」という次元に8個並び、「横」という次元に8個並んでる、という意味です 次元は「縦」と「横」の二つ
kentaronagata

2021/11/22 12:40

(8,8)と表示されました。 とりあえずは、2次元から1次元に変える理由は値を渡す相手が1次元の配列でしか読み取れないからという事ですね。 ありがとうございました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

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

ただいまの回答率
85.35%

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

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

質問する

関連した質問