我使用Python和NumPy,在“转置”方面有一些问题:
import numpy as np
a = np.array([5,4])
print(a)
print(a.T)
调用a.T并不是变换数组。如果a是[[],[]],那么它的转置是正确的,但是我需要[…,…,…]的转置。
我使用Python和NumPy,在“转置”方面有一些问题:
import numpy as np
a = np.array([5,4])
print(a)
print(a.T)
调用a.T并不是变换数组。如果a是[[],[]],那么它的转置是正确的,但是我需要[…,…,…]的转置。
当前回答
有一个方法没有在答案中描述,但在文档中描述了numpy. narray .transpose方法:
对于一维数组,这没有影响,因为转置向量就是相同的向量。要将1-D数组转换为2D列向量,必须添加一个额外维度。np.atleast2d (a)。T实现了这一点,就像a[:, np.newaxis]一样。
你可以这样做:
import numpy as np
a = np.array([5,4])
print(a)
print(np.atleast_2d(a).T)
这(在我看来)比使用新蜡更好。
其他回答
—>列/行矩阵:
>>> a=np.array([1,2,4])
>>> a[:, None] # col
array([[1],
[2],
[4]])
>>> a[None, :] # row, or faster `a[None]`
array([[1, 2, 4]])
正如@joe-kington所说,你可以用np替换None。新蜡是为了可读性。
你可以把一个现有的向量转换成一个矩阵,方法是用一组额外的方括号把它括起来。
from numpy import *
v=array([5,4]) ## create a numpy vector
array([v]).T ## transpose a vector into a matrix
Numpy还有一个矩阵类(参见array vs. matrix)…
matrix(v).T ## transpose a vector into a matrix
你可以使用np.expand_dims()函数来调换一个1-D数组(平面数组),就像你的例子中那样:
>>> a = np.expand_dims(np.array([5, 4]), axis=1)
array([[5],
[4]])
Np.expand_dims()将为所选轴添加一个维度。在本例中,我们使用axis=1,它增加了一个列维度,有效地调换了原始平面数组。
我只是巩固上面的帖子,希望它能帮助别人节省一些时间:
下面的数组有(2,)维数,它是一个一维数组,
b_new = np.array([2j, 3j])
有两种方法来转置一个1-D数组:
用“np”进行切片。或者没有。
print(b_new[np.newaxis].T.shape)
print(b_new[None].T.shape)
其他写法,以上不用T运算。!
print(b_new[:, np.newaxis].shape)
print(b_new[:, None].shape)
换行[]或使用np。矩阵,意味着增加一个新的维度。
print(np.array([b_new]).T.shape)
print(np.matrix(b_new).T.shape)
基本上转置函数的作用是交换数组的形状和步长:
>>> a = np.ones((1,2,3))
>>> a.shape
(1, 2, 3)
>>> a.T.shape
(3, 2, 1)
>>> a.strides
(48, 24, 8)
>>> a.T.strides
(8, 24, 48)
在一维numpy数组(rank-1数组)的情况下,形状和跨距是1元素元组,不能交换,这样的一维数组的转置返回它不变。相反,您可以将“行向量”(形状(1,n)的numpy数组)转置为“列向量”(形状(n, 1)的numpy数组)。为了实现这一点,你必须首先将你的1D numpy数组转换为行向量,然后交换形状和跨步(转置它)。下面是一个函数:
from numpy.lib.stride_tricks import as_strided
def transpose(a):
a = np.atleast_2d(a)
return as_strided(a, shape=a.shape[::-1], strides=a.strides[::-1])
例子:
>>> a = np.arange(3)
>>> a
array([0, 1, 2])
>>> transpose(a)
array([[0],
[1],
[2]])
>>> a = np.arange(1, 7).reshape(2,3)
>>> a
array([[1, 2, 3],
[4, 5, 6]])
>>> transpose(a)
array([[1, 4],
[2, 5],
[3, 6]])
当然你不需要这样做,因为你有一个一维数组,你可以直接通过a. remodeling((-1, 1))或a[:, None]将它重塑为(n, 1)数组。我只是想演示一下如何对数组进行转置。