Python:区分行和列向量

Mar*_*zyk 61 python arrays numpy vector scipy

有没有一种很好的方法来区分python中的行和列向量?到目前为止,我正在使用numpy和scipy,我到目前为止看到的是,如果我要给一个向量,说

from numpy import *
Vector = array([1,2,3])
Run Code Online (Sandbox Code Playgroud)

他们不能说天气我的意思是行或列向量.此外:

array([1,2,3]) == array([1,2,3]).transpose()
True
Run Code Online (Sandbox Code Playgroud)

在"现实世界"中哪个是不真实的.我意识到来自上述模块的载体上的大多数功能都不需要区分.例如outer(a,b)或者a.dot(b)我想为了自己的方便而区分.

bog*_*ron 61

您可以通过向数组添加另一个维来明确区分.

>>> a = np.array([1, 2, 3])
>>> a
array([1, 2, 3])
>>> a.transpose()
array([1, 2, 3])
>>> a.dot(a.transpose())
14
Run Code Online (Sandbox Code Playgroud)

现在强制它成为列向量:

>>> 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]])
Run Code Online (Sandbox Code Playgroud)

另一种选择是在想要区分时使用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]])
Run Code Online (Sandbox Code Playgroud)

  • 是的,这是你必须考虑的权衡.另一个选择是在需要区分时使用np.newaxis(请参阅编辑我的答案). (2认同)
  • 另一种将行向量(1d 数组)转换为列向量(返回副本)的方法:`a.reshape(a.size, 1)`,如果你像我一样懒惰,甚至可以使用 `a.reshape(-1, 1)` (2认同)

dav*_*idA 22

[]在写入向量时使用double .

然后,如果你想要一个行向量:

row_vector = array([[1, 2, 3]])    # shape (1, 3)
Run Code Online (Sandbox Code Playgroud)

或者如果你想要一个列向量:

col_vector = array([[1, 2, 3]]).T  # shape (3, 1)
Run Code Online (Sandbox Code Playgroud)


blu*_*ote 8

您要创建的向量既不是row也不是column。它实际上只有1维。您可以通过以下方式验证

  • 检查维度的数目myvector.ndim,其1
  • 检查myvector.shape,即(3,)(仅包含一个元素的元组)。对于行向量,应为(1, 3),对于列(3, 1)

两种处理方法

  • 创建实际的行或列向量
  • reshape 您当前的

您可以显式创建行或列

row = np.array([    # one row with 3 elements
   [1, 2, 3]
]
column = np.array([  # 3 rows, with 1 element each
    [1],
    [2],
    [3]
])
Run Code Online (Sandbox Code Playgroud)

或者,使用快捷方式

row = np.r_['r', [1,2,3]]     # shape: (1, 3)
column = np.r_['c', [1,2,3]]  # shape: (3,1)
Run Code Online (Sandbox Code Playgroud)

或者,您可以将其重塑(1, n)为行或(n, 1)

row = my_vector.reshape(1, -1)
column = my_vector.reshape(-1, 1)
Run Code Online (Sandbox Code Playgroud)

,其中会-1自动找到的值n


小智 6

我想你可以使用numpy.array的ndmin选项.保持2表示它将是(4,1)并且转置将是(1,4).

>>> a = np.array([12, 3, 4, 5], ndmin=2)
>>> print a.shape
>>> (1,4)
>>> print a.T.shape
>>> (4,1)
Run Code Online (Sandbox Code Playgroud)


小智 5

您可以将数组的元素存储在行或列中,如下所示:

>>> a = np.array([1, 2, 3])[:, None] # stores in rows
>>> a
array([[1],
       [2],
       [3]])

>>> b = np.array([1, 2, 3])[None, :] # stores in columns
>>> b
array([[1, 2, 3]])
Run Code Online (Sandbox Code Playgroud)