numpyで1D配列(線形代数のベクトル)を扱う方法を理解しようとしています。次の例では、私は2つのnumpy.array aとbの生成:1行、3列ではなく、numpyのために:私にとってnumpy:さまざまな形状の1D配列
>>> import numpy as np
>>> a = np.array([1,2,3])
>>> b = np.array([[1],[2],[3]]).reshape(1,3)
>>> a.shape
(3,)
>>> b.shape
(1, 3)
を、a及びbは、線形代数の定義に従って同じ形状を有しています。今
、numpyの内積:
>>> np.dot(a,a)
14
>>> np.dot(b,a)
array([14])
>>> np.dot(b,b)
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
ValueError: objects are not aligned
私は、3つの異なる出力を持っています。ドット(a、a)とドット(b、a)の違いは何ですか?なぜドット(b、b)がうまくいかないのですか?
は、私はまた、これらのドット積といくつかのdifferenciesを持っている:あなただけの1次元配列で使用されていない
>>> c = np.ones(9).reshape(3,3)
>>> np.dot(a,c)
array([ 6., 6., 6.])
>>> np.dot(b,c)
array([[ 6., 6., 6.]])
答えに感謝します。それで、もしnumpyで線形代数をしたいのなら、ベストプラクティスは何ですか? 2Dのnumpy.arrayですべてのベクトルを変換しますか?私は2つの異なる形でちょっと混乱しています... – Marcel
私は多くの線形代数を自分でやっていませんが、これはあなたが正確にやりたいことに依存していると思います。ただベクトル製品や他の簡単な操作/計算、その後1Dは正常です。行列計算などを行う場合は、2Dを使用する必要があります。 – joris
ベストプラクティスは、ベクトルを表す1次元配列と行列を表す2次元配列を使用することです。配列の魔法のためには、主に形状が(1、3)の2次元配列のような構成が必要ですが、標準の線形代数は必要ありません。線形代数に関しては、これは '1x3'行列のあまり有用でないオブジェクトに対応するでしょう。 – flonk