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

問題 18 /40

NumPyの演算でエラーになるものはどれか。 次の配列が定義されているものとする。 a = np.array([1, 1]) b = np.array([2, 2]) c = np.array([[2, 2]]) d = np.array([[3, 3], [4, 4]]) e = np.array([[5, 5], [6, 6], [7, 7]])

選択 1

a * b

選択 2

np.dot(a, b)

選択 3

np.dot(d, c)

選択 4

np.dot(d, e.T)

解説

選択肢3が正解です。 数学の線形代数では「ドット積」はベクトル同士の内積を意味します。数学の線形代数の場合、行列同士の積は「ドット積」ではありません。ただ、Numpyのdot関数は、ベクトル同士の内積だけではなく、行列同士の積にも使えます。 以下は問題文で定義した配列です。 a = np.array([1, 1]) b = np.array([2, 2]) c = np.array([[2, 2]]) d = np.array([[3, 3], [4, 4]]) e = np.array([[5, 5], [6, 6], [7, 7]]) 【選択肢1】 a * b ▶︎ array([2, 2]) 要素同士を掛け算する「アダマール積」です。dot関数は要素同士を掛けてから足しますが、「*」は要素同士を掛けるだけです。 【選択肢2】 np.dot(a, b) ▶︎ 4 ベクトル同士のため内積を計算します。要素同士を掛けて足すため、結果はスカラー(数値)で返ります。 【選択肢3】 np.dot(d, c) ▶︎ ValueError 「np.dot(d, c)」は2行2列の行列と、1行2列の行列の積となります。 行列同士の積は、2行2列と2行1列のように、内側の数が一致していないとできないため、「np.dot(d, c)」はValueErrorになります。 ベクトルの内積と行列の積は、中級問題10と上級問題9で詳しく解説しています。 【選択肢4】 np.dot(d, e.T) ▶︎ array([[30, 36, 42], [40, 48, 56]]) 「np.dot(d, e)」であれば、2行2列と3行2列の積となり、内側の数が一致していないためValueErrorになります。 選択肢4の場合、eを2行3列に転置しており、2行2列と2行3列の積になっているため計算が可能です。 なお、Python3.5から内積と行列の積で「@」演算子が使えるようになりました。問題文の場合、「a @ b」で内積、「c @ d」で行列の積が計算できます。 (公式書籍 p.128-130)