データ分析・初級問題チェック

問題 14 /40

NumPyに関する説明で、誤っているものはどれか。

選択 1

科学技術計算に特化したサードパーティ製のパッケージである。

選択 2

一つの配列に複数のデータ型を格納することができる。

選択 3

Pythonの標準リスト型に比べて、配列のデータを効率よく扱える。

選択 4

配列用のndarrayと、行列用のmatrixがある。

解説

選択肢2が正解です。 【選択肢1】 科学技術計算に特化したサードパーティ製のパッケージである。 正しい説明です。 【選択肢2】 一つの配列に複数のデータ型を格納することができる。 誤った説明です。 Numpyの配列の要素は一つのデータ型しか扱えません。例えば「np.array([1, 2.0])」のように、int型とfloat型を同じ配列で定義すると、「1」が「1.0」のfloat型に自動で変換され、「array([1., 2.])」となります。 データ型を一つに固定することで、処理が高速になります。Python標準のリストは一つの配列で複数のデータ型が扱えますが、その分、データ型などの情報が必要になりオーバーヘッドが大きくなります。 【選択肢3】 Pythonの標準リスト型に比べて、配列のデータを効率よく扱える。 正しい説明です。 Numpyは配列全体にわたる複雑な計算を、Pythonのforループを使わずに実現できます。 ■ 100万個の整数に2を掛ける例 a = list(range(1000000)) b = np.arange(1000000) Python標準のforループ ------------------------------- c = [] for x in a: c.append(x * 2) ------------------------------- Numpy ------------------------------- b * 2 ------------------------------- この実行速度を比較すると、Numpyのほうが100倍近く速いです。これが「効率よく扱える」一例となります。 【選択肢4】 配列用のndarrayと、行列用のmatrixがある。 正しい説明です。 選択肢2は配列の中の要素の話ですが、選択肢4はその要素を格納する箱の話です。Numpyで要素を格納する箱には、配列用のndarrayと、行列用のmatrixがあります。 ■ 配列用 a = np.array([[1, 2], [3, 4]]) type(a) ▶︎ numpy.ndarray ■ 行列用 b = np.matrix([[1, 2], [3, 4]]) type(b) ▶︎ numpy.matrix どちらも形状は2行2列ですが、matrixは行列として定義されています。例えば「*」演算子を使う場合、ndarrayの「a*a」は要素同士の積になりますが、matrixの「b*b」は行列の積になります。ndarrayで行列の積を計算する場合は「a@a」とします。要素同士の積と行列の積の違いは、上級問題18で解説します。 なお、公式書籍にmatrixを扱うコードは登場しません。 (公式書籍 p.92)