转置1d numpy数组

sgtfey8w  于 2021-09-29  发布在  Java
关注(0)|答案(16)|浏览(509)

我使用python和numpy,在“转置”方面有一些问题:

import numpy as np
a = np.array([5,4])
print(a)
print(a.T)

援引 a.T 没有对数组进行转置。如果 a 例如 [[],[]] 然后它正确地转置,但我需要 [...,...,...] .

kupeojn6

kupeojn61#

它完全按照它的预期工作。一维数组的转置仍然是一维数组(如果你习惯了matlab,它基本上没有一维数组的概念。matlab的“1d”阵列是2d。)
如果你想把一维向量转换成二维数组,然后转置它,只需用 np.newaxis (或 None ,他们是一样的, newaxis 更具可读性)。

import numpy as np
a = np.array([5,4])[np.newaxis]
print(a)
print(a.T)

不过,一般来说,你不必担心这一点。如果你只是出于习惯,添加额外维度通常不是你想要的。在进行各种计算时,numpy将自动广播1d数组。通常不需要区分行向量和列向量(它们都不是向量)。他们都是2d!)当你只需要一个向量的时候。

2skhul33

2skhul332#

使用两对支架,而不是一对。这将创建一个二维数组,该数组可以进行转置,与使用一对括号创建的一维数组不同。

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's shape 方法来查看此处发生的情况:

>>> b = np.array([10,20,30])
>>> b.shape
(3,)
>>> b = np.array([[10,20,30]])
>>> b.shape
(1, 3)
lo8azlld

lo8azlld3#

对于一维阵列:

a = np.array([1, 2, 3, 4])
a = a.reshape((-1, 1)) # <--- THIS IS IT

print a
array([[1],
       [2],
       [3],
       [4]])

一旦您理解了这里的-1表示“需要多少行”,我发现这是“转置”数组的最可读的方式。如果数组的维数较高,只需使用 a.T .

shstlldc

shstlldc4#

您可以通过将现有向量 Package 在一组额外的方括号中,将其转换为矩阵。。。

from numpy import *
v=array([5,4]) ## create a numpy vector
array([v]).T ## transpose a vector into a matrix

numpy也有一个 matrix 类(请参见阵列与矩阵)。。。

matrix(v).T ## transpose a vector into a matrix
wztqucjr

wztqucjr5#

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]])

正如@joe kington所说,你可以取代 None 具有 np.newaxis 为了可读性。

pdkcd3nj

pdkcd3nj6#

要将一维数组“转置”到二维列,可以使用 numpy.vstack :

>>> numpy.vstack(numpy.array([1,2,3]))
array([[1],
       [2],
       [3]])

它也适用于普通列表:

>>> numpy.vstack([1,2,3])
array([[1],
       [2],
       [3]])
oknrviil

oknrviil7#

只能转置二维数组。你可以用 numpy.matrix 创建二维阵列的步骤。这已经晚了三年,但我只是在补充可能的解决方案:

import numpy as np
m = np.matrix([2, 3])
m.T
x6h2sr28

x6h2sr288#

改用 arr[:,None] 创建列向量的步骤

n3ipq98p

n3ipq98p9#

另一个解决方案……:)

import numpy as np

a = [1,2,4]

[1, 2, 4]

b = np.array([a]).T

数组([[1]、[2]、[4]])

yks3o0rb

yks3o0rb10#

转置函数的基本作用是交换阵列的形状和步幅:

>>> 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)

在1d numpy数组(秩1数组)的情况下,形状和跨步是1个元素元组,不能交换,这种1d数组的转置返回不变。相反,您可以转置“行向量”(形状的numpy数组) (1, n) )转换为“列向量”(形状的numpy数组) (n, 1) ). 要实现这一点,您必须首先将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]])

当然,您不必这样做,因为您有一个1d阵列,您可以直接将其重塑为 (n, 1) 排列方式 a.reshape((-1, 1))a[:, None] . 我只是想演示如何转置数组。

hec6srdp

hec6srdp11#

我只是巩固了上面的帖子,希望它能帮助其他人节省一些时间:
下面的数组具有 (2, ) 维,它是一个一维数组,

b_new = np.array([2j, 3j])

有两种方法可以转置一维阵列:
用“np.newaxis”或无进行切片。!

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.matrix,意味着添加新维度。!

print(np.array([b_new]).T.shape)
print(np.matrix(b_new).T.shape)
fcg9iug3

fcg9iug312#

转置

x = [[0 1],
     [2 3]]

xT = [[0 2],
      [1 3]]

代码是:

import numpy as np
a = [[0, 1],[2, 3]]
x = np.array(a);
np.transpose(x)

或者简单的方法:

x.T

此链接可获取更多信息:http://docs.scipy.org/doc/numpy/reference/generated/numpy.transpose.html

**转置一维数组将返回原始数组的不变视图。对于1d阵列,请尝试以下操作:

b = np.array([a])
nmpmafwu

nmpmafwu13#

如上所述,1d数组的转置是1d数组,因此转置1d数组的一种方法是将数组转换为如下矩阵:

np.transpose(a.reshape(len(a), 1))
1qczuiv0

1qczuiv014#

中函数的名称 numpy 这是一个堆栈。

>>>a=np.array([5,4])
>>>np.column_stack(a)
array([[5, 4]])
ztyzrc3y

ztyzrc3y15#

有一种方法未在答案中描述,但在文档中描述了该方法 numpy.ndarray.transpose 方法:
对于1-d阵列,这没有影响,因为转置向量只是同一个向量。要将一维数组转换为二维列向量,必须添加额外的维度。np.atlest2d(a).t实现了这一点,a[:,np.newaxis]也实现了这一点。
我们可以做到:

import numpy as np
a = np.array([5,4])
print(a)
print(np.atleast_2d(a).T)

哪个(imo)比使用更好 newaxis .

相关问题