Joe*_*ton 217
它完全按照预期的方式工作.一维阵列的转置仍然是一维阵列!(如果您习惯使用matlab,它基本上没有一维数组的概念.Matlab的"1D"数组是2D.)
如果你想将你的1D矢量转换为2D数组然后转置它,只需将其切片np.newaxis
(或者None
,它们是相同的,newaxis
只是更具可读性).
import numpy as np
a = np.array([5,4])[np.newaxis]
print(a)
print(a.T)
Run Code Online (Sandbox Code Playgroud)
一般来说,你不需要担心这一点.如果您只是出于习惯,添加额外维度通常不是您想要的.在进行各种计算时,Numpy会自动广播一维数组.当你只想要一个向量时,通常不需要区分行向量和列向量(它们都不是向量.它们都是2D!).
sav*_*ent 122
使用两个支架对而不是一个.这会创建一个可以转置的2D数组,与您创建的1D数组不同,如果使用一个支架对.
import numpy as np
a = np.array([[5, 4]])
a.T
Run Code Online (Sandbox Code Playgroud)
更全面的例子:
>>> 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]])
Run Code Online (Sandbox Code Playgroud)
使用numpy的shape
方法来查看这里发生了什么:
>>> b = np.array([10,20,30])
>>> b.shape
(3,)
>>> b = np.array([[10,20,30]])
>>> b.shape
(1, 3)
Run Code Online (Sandbox Code Playgroud)
Ulf*_*lak 70
对于1D阵列:
a = np.array([1, 2, 3, 4])
a = a.reshape((-1, 1)) # <--- THIS IS IT
print a
array([[1],
[2],
[3],
[4]])
Run Code Online (Sandbox Code Playgroud)
一旦你理解-1这里意味着"尽可能多的行",我发现这是"转置"数组最可读的方式.如果您的数组具有更高的维度,只需使用a.T
.
nob*_*bar 17
您可以将现有矢量包装到一个额外的方括号中,将其转换为矩阵...
from numpy import *
v=array([5,4]) ## create a numpy vector
array([v]).T ## transpose a vector into a matrix
Run Code Online (Sandbox Code Playgroud)
matrix(v).T ## transpose a vector into a matrix
Run Code Online (Sandbox Code Playgroud)
ank*_*tis 13
numpy 1D数组 - >列/行矩阵:
>>> a=np.array([1,2,4])
>>> a[:, None] # col
array([[1],
[2],
[4]])
>>> a[None, :] # row, or faster `a[None]`
array([[1, 2, 4]])
Run Code Online (Sandbox Code Playgroud)
正如@乔金通说,你可以替换None
使用np.newaxis
的可读性.
要将1d数组'转置'到2d列,您可以使用numpy.vstack
:
>>> numpy.vstack(numpy.array([1,2,3]))
array([[1],
[2],
[3]])
Run Code Online (Sandbox Code Playgroud)
它也适用于香草列表:
>>> numpy.vstack([1,2,3])
array([[1],
[2],
[3]])
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
334535 次 |
最近记录: |