我使用Python和NumPy,对"转置"有一些问题。
import numpy as np
a = np.array([5,4])
print(a)
print(a.T)
调用a.T
并不是在转置数组。 如果a
是[[],[]],那么它的转置是正确的,但是我需要
[...,...,...]的转置。
它的工作原理和它应该有的完全一样。一个一维数组的转置仍然是一个一维数组!(如果你习惯了matlab,它基本上没有一维数组的概念。 (如果你习惯于使用matlab,它从根本上没有一维数组的概念。Matlab的 "一维 "数组是二维的)。
如果你想把你的一维向量变成二维数组,然后进行转置,只要用np.newaxis
(或None
,它们是一样的,newaxis
只是更易读)将它切开。
import numpy as np
a = np.array([5,4])[np.newaxis]
print(a)
print(a.T)
不过一般来说,你不需要担心这个问题。添加额外的维度通常不是你想要的,如果你只是出于习惯。 Numpy在进行各种计算时,会自动广播一个一维数组。当你只想要一个向量时,通常不需要区分行向量和列向量(它们都不是_向量。 它们都是二维的!)。
使用两个括号对而不是一个。这将创建一个二维数组,它可以被转置,而不像你使用一个括号对创建的一维数组那样。
import numpy as np
a = np.array([[5, 4]])
a.T
更彻底的例子。
>>> a = [3,6,9]
>>> b = np.array(a)
>>> b.T
array([3, 6, 9]) #Here it didn't transpose because 'a' is 1 dimensional
>>> b = np.array([a])
>>> b.T
array([[3], #Here it did transpose because a is 2 dimensional
[6],
[9]])
使用numpy'的shape
方法来看看这里发生了什么。
>>> b = np.array([10,20,30])
>>> b.shape
(3,)
>>> b = np.array([[10,20,30]])
>>> b.shape
(1, 3)
你可以通过用一组额外的方括号将一个现有的向量转换为矩阵...
from numpy import *
v=array([5,4]) ## create a numpy vector
array([v]).T ## transpose a vector into a matrix
numpy也有一个matrix
类(见array vs. matrix)...
matrix(v).T ## transpose a vector into a matrix