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

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

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

IMAP (Internet Message Access Protocol) とは、メールサーバー上の電子メールデータを操作するためのプロトコルです。

Python 3.x

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

Python

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

Q&A

解決済

3回答

673閲覧

Pythonの四角括弧の使い方=意味に関する質問

insecticide

総合スコア315

IMAP

IMAP (Internet Message Access Protocol) とは、メールサーバー上の電子メールデータを操作するためのプロトコルです。

Python 3.x

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

Python

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

0グッド

0クリップ

投稿2022/03/29 04:47

例えば、

import numpy as np
arr = np.array( [ [1,2,3], [21,22,23], [31,32,33] ] )

上記 np.arrayの引数の外の四角括弧[]はどうしても余分に感じます。下記のように省いても良いのではないかと思いますが、その理屈を教えてください。

arr = np.array( [1,2,3], [21,22,23], [31,32,33] )

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

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

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

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

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

melian

2022/03/29 05:03

本題とは無関係ですが、こんな書き方もできます。 >>> np.array(np.mat('1,2,3; 21,22,23; 31,32,33')) array([[ 1, 2, 3], [21, 22, 23], [31, 32, 33]])
guest

回答3

0

その1
最初の書き方で引数に入っているのはリストのリスト1つであり、2番目のものの引数は3つのリストであることは把握していますか?
numpy.array()関数は、第一引数として、作成する配列の元となるデータを1つ必要としています。
リファレンス
最初の書き方であれば、対象としてそのリストのリストが渡されますが、2番目の書き方ではそうならないので意図通りにはなりません。

その2
numpy.array()がなぜ複数の配列を引数に渡すことができるようになっていないのかという質問でしょうか。
これは、numpy.arrayが統一したインターフェースで多次元のデータを扱えるようにするためです。

投稿2022/03/29 07:19

TakaiY

総合スコア12765

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

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

insecticide

2022/03/29 21:00

非常に説得力の高いご説明ですね! ありがとうございました。
guest

0

ベストアンサー

下記のように省いても良いのではないか

そのようなルールの下で、今のインタフェースでの np.array([2]) (1次元 長さ1) と np.array(2) (スカラー) を書き分ける方法を考えてください。

あと、
そのようなルールだとnp.array([1, 2, 3])と書いたら、今のインタフェースでのnp.array([[1, 2, 3]])となる=shapeが(1, 3)になるのが自然だと考えているということなんですが、本当にそう感じているんでしょうか?

投稿2022/03/29 05:26

編集2022/03/29 06:08
quickquip

総合スコア11038

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

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

insecticide

2022/03/29 21:03 編集

鋭いご質問、非常に啓発で、ありがとうございます。 でも、物理学の概念的に、確かに(1次元 長さ1)のvectorとscalarとは違うのですが、数字表現では、scalarと(1次元 長さ1)のvectorとはどうして区別できるのでしょうか。例えば、scalarをわざわざ(1次元 長さ1)のvectorとする必要あるのでしょうか。
quickquip

2022/04/01 02:39 編集

だいたいにおいて同一視して問題ないように振る舞いますが、 np.stack([np.array([1]), np.array([2])]) はできる(np.array([[1], [2]]) が作られる)が、 np.stack([np.array([1]), np.array(2)]) はできない みたいな差はあります。 vectorとvectorをstackするのはいいけど、vectorとscalarをstackするようなコードを書いたら、それはおまえ何か間違えてるだろ? とnumpyに怒られるわけです。 プログラミング言語における型やインタフェースのデザインって、人が何か間違えた時にプログラムに指摘してもらえるようにあらかじめ考慮するのが常じゃないでしょうか?
insecticide

2022/04/02 22:12

> vectorとvectorをstackするのはいいけど、vectorとscalarをstackするようなコードを書いたら、それはおまえ何か間違えてるだろ? とnumpyに怒られるわけです。 そうですね。良い勉強になりました。 データの機能や次元の拡張性に関してもscalarとvectorやTensorとは全然ちがいますね❣(仮令、データに一つの要素しかない場合であっても) 重要な問題を意識させていただいて、心より感謝いたします。
guest

0

python

1import numpy as np 2arr1 = np.array( [ [1,2,3], [21,22,23], [31,32,33] ] ) 3arr2 = np.array( [1,2,3], [21,22,23], [31,32,33] ) # TypeError: array() takes from 1 to 2 positional arguments but 3 were given

と、なるように
arr1のほうは引数1つをnp.array()に渡していますが、
arr2のほうは引数3つをnp.array()に渡そうとしています。(そしてエラーになる)

投稿2022/03/29 04:52

ozwk

総合スコア13528

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

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

insecticide

2022/03/29 21:07

あっ、そうですか。これは仕様でしようがないですね。^^;
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問