在Numpy中将行向量转换为列向量

MY_*_*Y_G 7 python numpy linear-algebra multidimensional-array numpy-ndarray

假设我有一个形状为(1,256)的行向量。我想将其转换为形状为(256,1)的列向量。您在Numpy中会如何做?

kma*_*o23 20

您可以使用转置操作来执行此操作:

例子:

In [2]: a = np.array([[1,2], [3,4], [5,6]])
In [5]: a.shape
Out[5]: (3, 2)

In [6]: a_trans = a.T    #or: np.transpose(a), a.transpose()
In [8]: a_trans.shape
Out[8]: (2, 3)
In [7]: a_trans
Out[7]: 
array([[1, 3, 5],
       [2, 4, 6]])
Run Code Online (Sandbox Code Playgroud)

请注意,原始数组a仍将保持不变。转置操作只会复制并转置它。


如果输入阵列是相当1D中,则可以促进通过引入新的(singleton)的轴作为所述第二尺寸数组的列向量。下面是一个例子:

# 1D array
In [13]: arr = np.arange(6)

# promotion to a column vector (i.e., a 2D array)
In [14]: arr = arr[..., None]    #or: arr = arr[:, np.newaxis]

In [15]: arr
Out[15]: 
array([[0],
       [1],
       [2],
       [3],
       [4],
       [5]])

In [12]: arr.shape
Out[12]: (6, 1)
Run Code Online (Sandbox Code Playgroud)

对于一维情况,另一种选择是使用numpy.atleast_2d()后跟转置操作,正如 ankostis 在评论中所建议的那样

In [9]: np.atleast_2d(arr).T
Out[9]: 
array([[0],
       [1],
       [2],
       [3],
       [4],
       [5]])
Run Code Online (Sandbox Code Playgroud)

  • 对于一维数组,这不起作用。(要在列向量和行向量之间进行更改,首先将一维数组转换为矩阵对象。),https://docs.scipy.org/doc/numpy-1.10.0/reference/generated/numpy.ndarray.transpose .html (9认同)
  • 因为对于一维数组,我们只有*一*维。至少在数学上,没有为此类数组定义转置。 (2认同)

Mah*_*chi 7

我们可以简单地使用numpy的重塑功能:

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

a.shape
(1,4)
b=a.reshape(-1,1)
b:
array([[1],
       [2],
       [3],
       [4]])

b.shape
(4,1)
Run Code Online (Sandbox Code Playgroud)

  • 如果您能解释代码的作用,这将是一个更好的答案。 (5认同)

Dut*_*taA 5

我编译的一些方法是:

>>> import numpy as np
>>> a = np.array([1, 2, 3], [2, 4, 5])
>>> a
array([[1, 2],
       [2, 4],
       [3, 5]])
Run Code Online (Sandbox Code Playgroud)

另一种方法:

>>> a.T
array([[1, 2],
       [2, 4],
       [3, 5]])
Run Code Online (Sandbox Code Playgroud)

另一种方法是:

>>> a.reshape(a.shape[1], a.shape[0])
array([[1, 2],
       [3, 2],
       [4, 5]])
Run Code Online (Sandbox Code Playgroud)

我在所有这些问题中都使用了一个二维数组,真正的问题出现在有一个一维行向量要优雅地列化时。

Numpyreshape有一个功能,你可以传递你想要的维度之一(行数或列数),如果你传递另一个维度,numpy 可以自己找出另一个维度-1

>>> a.reshape(-1, 1)
array([[1],
       [2],
       [3],
       [2],
       [4],
       [5]])
       
>>> a = np.array([1, 2, 3])
>>> a.reshape(-1, 1)
array([[1],
       [2],
       [3]])
       
>>> a.reshape(2, -1)
...
ValueError: cannot reshape array of size 3 into shape (2,newaxis)
Run Code Online (Sandbox Code Playgroud)

因此,只要(m * n) / your_choice是整数,您就可以选择一维而无需担心其他维。

如果您想了解更多相关信息-1,请转到: numpy reshape 中的 -1 是什么意思?

注意:所有这些操作都返回一个新数组,并且不会修改原始数组。