numpy.array([])和numpy.array([[]])有什么区别?

时间:2019-01-17 16:44:21

标签: python numpy

为什么在使用alpha时不能得到转置,但是对于beta却可以得到?额外的[]有什么作用?

alpha = np.array([1,2,3,4])
alpha.shape
alpha.T.shape

beta = np.array([[1,2,3,4]])
beta.shape
beta.T.shape

5 个答案:

答案 0 :(得分:3)

从文档(link):

  

转置一维数组将返回原始数组的不变视图。

数组[1,2,3,4]是一维数组,而数组[[1,2,3,4]]是1x4二维数组。

答案 1 :(得分:2)

第二对括号表示它是一个2D数组,因此,使用and数组时,转置数组与第一个数组不同(因为转置会切换2维)。但是,如果数组只有一维,则转置不会改变任何内容,并且所得数组等于起始数组。

答案 2 :(得分:1)

alpha是一维数组,转置本身。

beta是2D数组,因此您可以将(1,n)转换为(n,1)

要对alpha执行相同操作,您需要添加尺寸,而无需转置尺寸:

alpha[:, None]

答案 3 :(得分:1)

del g是形状为(4,)的一维数组。转置只是alpha,即alpha

alpha == alpha.T是形状为(1,4)的2D数组。它是单行,但是具有两个维度。它的转置看起来像是形状为(4,1)的单列。

答案 4 :(得分:1)

当我来到编程语言领域时,来自“业务的一面”对我来说也很奇怪。经过深思熟虑,我意识到从编程角度来看,它们是不同的。看下面的列表:

a = [1,2,3,4,5]

这是一维结构。之所以这样,是因为要取回值1,2,3,4和5,您只需要分配一个地址值即可。例如,如果发出命令a [2],将返回3。

现在看看这个列表:

b = [[ 1,  2,  3,  4,  5],
     [11, 22, 33, 44, 55]]

例如,要取回11,您将需要两个位置编号,因为1在第二个列表中,所以返回1;而在第二个列表中,它在第一个位置,返回0。换句话说,b [1,0]会给您11。

现在是技巧部分。看一下这第三张清单:

c = [ [ 100, 200, 300, 400, 500] ]

如果仔细看,每个数字都需要从列表中取回2个位置数字。例如300需要0,因为它位于第一个(也是唯一的)列表中,而2是因为它是第一个列表的第三个元素。 c [0,2]让您重回300。

此列表可以转置,因为它具有两个维度,并且转置操作可以切换位置参数。因此c.T会给您返回形状为[5,1]的列表,因为c的形状为[1,5]。

返回列表a。那里只有一个位置编号的清单。该列表仅具有[5]的形状,因此移调操作没有第二个位置自变量可以使用。因此,它仍然是[5],如果您尝试a.T,您将获得a。

知道了吗?

最诚挚的问候,

古斯塔沃