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

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

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

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

OpenCV

OpenCV(オープンソースコンピュータービジョン)は、1999年にインテルが開発・公開したオープンソースのコンピュータビジョン向けのクロスプラットフォームライブラリです。

Python 3.x

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

Q&A

解決済

2回答

591閲覧

numpy配列、リストの追加、次元数を上げる方法

dendenmushi

総合スコア98

NumPy

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

OpenCV

OpenCV(オープンソースコンピュータービジョン)は、1999年にインテルが開発・公開したオープンソースのコンピュータビジョン向けのクロスプラットフォームライブラリです。

Python 3.x

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

0グッド

0クリップ

投稿2019/08/10 07:45

前提・実現したいこと

以下のグレースケール画像のshapeは(63.64)です。
この同種のグレースケール画像を20枚まとめて、
zenimages.shapeを(20, 63, 64)のように積み上げてデータ化していくのが目的です。

python

1(Pdb) p img_gray 2array([[223, 239, 239, ..., 239, 239, 239], 3 [239, 239, 223, ..., 223, 223, 239], 4 [239, 239, 223, ..., 239, 239, 223], 5 ..., 6 [223, 223, 239, ..., 239, 239, 239], 7 [239, 239, 239, ..., 239, 239, 239], 8 [239, 239, 223, ..., 239, 239, 239]], dtype=uint8)

試したこと

python

1img_gray_matome = [[[]]] 2#img_gray_matome = (0, 0, 0) 3 4import cv2 5img = cv2.imread('D:/data/001.png') 6img_gray= cv2.cvtColor(img,cv2.COLOR_BGR2GRAY) 7 8img_gray_matome.append(img_gray) 9img_gray_matome.append(img_gray) 10 11(Pdb) img_gray.shape 12(63, 64) 13(Pdb) p img_gray_matome 14 15 16 結果 17[[[]], array([[223, 239, 239, ..., 239, 239, 239], 18 [239, 239, 223, ..., 223, 223, 239], 19 [239, 239, 223, ..., 239, 239, 223], 20 ..., 21 [223, 223, 239, ..., 239, 239, 239], 22 [239, 239, 239, ..., 239, 239, 239], 23 [239, 239, 223, ..., 239, 239, 239]], dtype=uint8), array([[223, 239, 239, ..., 239, 239, 239], 24 [239, 239, 223, ..., 223, 223, 239], 25 [239, 239, 223, ..., 239, 239, 223], 26 ..., 27 [223, 223, 239, ..., 239, 239, 239], 28 [239, 239, 239, ..., 239, 239, 239], 29 [239, 239, 223, ..., 239, 239, 239]], dtype=uint8)]

python

1img_gray_matome = [[[],[]], [[], []], [[], []]]

今非常に頭がこんがらがってしまっていることがpythonのリスト、配列、numpy.ardrray配列にどんな違いがあるのかです。いろいろ模索、サイト情報などもみているのですが、参考になるサイトなどもご存知でしたら教えて頂けないでしょうか。

unit8などの情報も頭がこんがらがってしまっていまして、こちらも補足ですが何かいいサイトご存知ありましたら教えて頂けないでしょうか。配列やリストとまったく関係ないものなのでしょうか。よろしくお願い致します。

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

win10,Python3.7

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

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

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

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

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

guest

回答2

0

ベストアンサー

【追記】
全体をnumpy配列にしたいなら下記を追加ください。

python

1import numpy 2 3下記コード 4 5out = np.array(out)

カラー画像が不要との前提にすると下記コードになります。(画像ファイル名は任意)

python

1import cv2 2 3out = [] 4 5img = cv2.imread('Flower2.jpg', cv2.IMREAD_GRAYSCALE) 6img2 = cv2.imread('Flower3.jpg', cv2.IMREAD_GRAYSCALE) 7 8out.append(img) 9out.append(img2)

outの内容:
[array([[15, 15, 16, ..., 50, 51, 51],
[12, 13, 13, ..., 50, 51, 51],
[13, 14, 15, ..., 51, 51, 50],
...,
[18, 18, 18, ..., 24, 24, 24],
[18, 18, 18, ..., 25, 25, 25],
[19, 18, 18, ..., 26, 26, 26]], dtype=uint8), array([[16, 16, 16, ..., 32, 31, 29],
[16, 16, 16, ..., 32, 30, 29],
[16, 17, 17, ..., 31, 30, 28],
...,
[28, 28, 29, ..., 13, 12, 12],
[28, 28, 29, ..., 8, 7, 7],
[28, 28, 29, ..., 3, 3, 2]], dtype=uint8)]

※uint8については下記サイトが参考になるかと。
https://deepage.net/features/numpy-dtype.html

投稿2019/08/10 10:04

編集2019/08/10 10:37
meg_

総合スコア10579

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

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

dendenmushi

2019/08/10 11:17

実現できました。ありがとうございました。お二人をベストアンサーにしたいです。
guest

0

np.expand_dims(), np.concatenate() 辺りを使ってみるのはどうでしょうか。
例えば、 (3, 4) の ndarray を 3つ重ねて (3, 3, 4) にするようなものは以下のように書けます。

python

1import numpy as np 2 3img1 = np.ones((3, 4)) 4img2 = np.ones((3, 4)) * 2 5img3 = np.ones((3, 4)) * 3 6 7img_list = [img1, img2, img3] # (3, 4) が 3つ 8print(img_list[0].shape) # -> (3, 4) 9 10img_list = [np.expand_dims(x, axis=0) for x in img_list] # (1, 3, 4) が 3つ 11print(img_list[0].shape) # -> (1, 3, 4) 12 13all_images = np.concatenate(img_list) # axis=0 で連結 14print(all_images.shape) # -> (3, 3, 4) 15 16print(all_images) 17 18""" 19[[[1. 1. 1. 1.] 20 [1. 1. 1. 1.] 21 [1. 1. 1. 1.]] 22 [[2. 2. 2. 2.] 23 [2. 2. 2. 2.] 24 [2. 2. 2. 2.]] 25 [[3. 3. 3. 3.] 26 [3. 3. 3. 3.] 27 [3. 3. 3. 3.]]] 28"""

■ 追記1

pythonのリスト、配列、numpy.ardrray配列にどんな違いがあるのか, uint8 との関係

どういう文脈で出てきたかによりますが、Pythonのリストと配列 は、たぶん同じものじゃないですかね。
割と リストのことを配列と呼ぶ人も多いですので。

  • 通常 リスト というと list(), [1, 2] みたいなものを指します。
  • Pythonには array(配列) というのも確かにありますが、滅多にお目にかかることはない気がします。(実用的なコードでは見たことがないです)。
  • numpyのarrayは ndarray という型名っぽいですが、これはリストとはかなり違うものです。
  • uint8 は ndarrayの要素の型 の一つですね。 他にも np.float32 とかたくさんあります

どう違うのか、、、と聞かれるとなかなか答えにくいですが、
ndarrayは要素の単一の型しか取れない代わりに、まとめて操作する(全要素を10倍するとか)のが非常に高速です。
Listは色々な要素がしまえて便利ですが、繰り返しはndarrayよりはるかに遅いです。

もう検索されたかもしれませんが、
https://note.nkmk.me/python-list-array-numpy-ndarray/
などに違いが少し書かれていますね。


■ 追記2
ちなみに一般論として リスト と 配列 は性質のことなるものです。
https://qiita.com/maimax/items/dcff7206b747bf726ad8

Pythonでは

  • list は リスト
  • array, ndarray は配列

のような性質が強いです(調べてみると、細かい実装では、いろいろ異論がありそうですが...だいたいで)。

投稿2019/08/10 09:19

編集2019/08/10 09:54
mokemokechicken

総合スコア948

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

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

dendenmushi

2019/08/10 10:05

回答ありがとうございます。まず熟読確認致します。
dendenmushi

2019/08/10 11:16

実現できました。感謝いたします。お二人にベストアンサーにしたいです。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問