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

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

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

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

Q&A

解決済

2回答

1103閲覧

Pythonのshapeが(4,)のような配列の名前。

amigo

総合スコア7

Python

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

0グッド

0クリップ

投稿2019/07/28 16:12

Pythonのnumpyで行列計算をしているとshapeが(4,1)ではなく(4,)のような配列があり、その挙動がおかしいのですが、このような配列の名前がわからないので調べることができません。教えてほしいです。
また、このように検索しづらいことを検索するコツも教えていただけるとありがたいです。

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

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

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

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

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

0kcal

2019/07/28 16:30

お疲れ様です。 (※ 以下、万一間違えていたら、許して下さい。) (4,1)は、行とか列とかいうと、不正確かもしれませんが、 4行1列みたいな意味。2次元という意味。 (4,)は、文法上(4,)と書いてますが、(4)だと思えばいいです、 より語弊がありますが、4行という意味。一次元という意味。 検索方法について書かれていますが、答え知りません、すみません。 尚、質問は、分けられたほうが、回答を得やすいと思います。検索ノウハウについては、 独立して質問すると、回答が得られるのでは?
guest

回答2

0

ベストアンサー

numpyにおいて、array()で表現されるものはarray(つまり配列)で統一されています。ただし、shapeが異なると意味しているものが微妙に異なります。

a1=np.array([1,2,3,4,5]) a2=np.array([[1,2,3,4,5]]) a3=np.array([[1],[2],[3],[4],[5]])

上記の場合、各々のshapeは(5,)、(1,5)、(5,1)となります。これらは見かけ上、似ていますが、a1は要素数5のベクトル、a2は1×5の行列、a3は5×1の行列を意味しています。よって、インデックスを使ってデータを参照するとき挙動が変わってきます。(a1[0]などとして確かめるとわかります)
行列の計算の場合、内積(np.dot)がかなり影響を受けるはずです。本来のベクトルの内積はnp.dot(a1,a3)ですがnp.dotの仕様の関係でnp.dot(a3,a2)も計算できてしまいます。したがって、ベクトルの計算のときは意識して使いわけたほうがいいかと思います

投稿2019/07/29 01:45

R.Shigemori

総合スコア3378

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

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

amigo

2019/07/30 01:10 編集

a1=np.array([1,2,3,4,5]) a3=np.array([[1],[2],[3],[4],[5]]) 各々のshapeは(5,)、(5,1)であることを失念して、(5,)が特殊な名前のある配列だと思い違っていました。 numpyに関して雰囲気で使っていたところがあるため、一度仕様を読み、チュートリアルをやり直したいと思います。 ありがとうございました。 自分が何が理解できでいなかったかを返答のみで理解できたので、こちらの方をベストアンサーにします。
guest

0

特にこういうのに名前はついていません。ごく普通の配列なのです。

そもそもnumpy配列のshapeはtupleで表されるのですが、質問文のようなtupleは要素数1つのtupleを表しています。これは公式のチュートリアルなどでも書かれているpythonの基礎ですから、ご存知かと思います。

https://docs.python.org/ja/3/tutorial/datastructures.html#tuples-and-sequences

だから、その配列は要素数4つの(Cとかでいう)1次元配列です。ちなみに、○次元配列の○のところは(arrayという変数に配列を代入したとして)array.ndimで取れたりします。len(array.shape)と大差ありませんが、これは知っておいた方が良いでしょう。


こういうものが特別挙動がおかしいということはありませんから、numpyの仕様を把握しないで使っているのではないかと思います。

まだ読んだことがなければ、ざっくりチュートリアルを見てみるべきでしょう。

https://docs.scipy.org/doc/numpy/user/quickstart.html


「numpy shape」で検索したら普通に出ました。

https://deepage.net/features/numpy-shape.html

投稿2019/07/28 16:27

hayataka2049

総合スコア30939

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

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

amigo

2019/07/30 01:21 編集

おかしいというのは語弊がありますね。 (4,1)と(4,)を掛けて(4,4)の行列が出てきて少し混乱していました。 a1=np.array([1,2,3,4,5]) a3=np.array([[1],[2],[3],[4],[5]]) 各々のshapeは(5,)、(5,1)であることを失念して、(5,)が特殊な名前のある配列だと思い違っていました。 numpyに関して雰囲気で使っていたところがあるため、一度仕様を読み、チュートリアルをやり直したいと思います。 ありがとうございました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.31%

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

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

質問する

関連した質問