1. ホーム
  2. python

[解決済み] Python 行ベクトルと列ベクトルの区別

2023-05-26 19:58:42

質問

Pythonで行ベクトルと列ベクトルを区別する良い方法はありますか?今のところ、私はnumpyとscipyを使っていて、私がこれまでに見たものは、私が1つのベクトルを与えるならば、例えば、次のとおりです。

from numpy import *
Vector = array([1,2,3])

のように、行ベクトルか列ベクトルかを判断することはできないでしょう。しかも

array([1,2,3]) == array([1,2,3]).transpose()
True

これは現実の世界ではありえないことです。 私は、前述のモジュールからのベクトルに対する関数のほとんどは、微分を必要としないことを理解しています。例えば outer(a,b) または a.dot(b) といった具合ですが、自分の都合で区別しておきたいと思います。

どのように解決するのですか?

配列に別の次元を追加することで、区別を明示することができます。

>>> a = np.array([1, 2, 3])
>>> a
array([1, 2, 3])
>>> a.transpose()
array([1, 2, 3])
>>> a.dot(a.transpose())
14

今度は強制的に列ベクトルにします。

>>> a.shape = (3,1)
>>> a
array([[1],
       [2],
       [3]])
>>> a.transpose()
array([[1, 2, 3]])
>>> a.dot(a.transpose())
array([[1, 2, 3],
       [2, 4, 6],
       [3, 6, 9]])

もう一つの選択肢は、区別したいときにnp.newaxisを使用することです。

>>> a = np.array([1, 2, 3])
>>> a
array([1, 2, 3])
>>> a[:, np.newaxis]
array([[1],
       [2],
       [3]])
>>> a[np.newaxis, :]
array([[1, 2, 3]])