numpy.shape给出了不一致的回答-为什么?

2024-06-02 13:02:17 发布

您现在位置:Python中文网/ 问答频道 /正文

为什么这个项目

import numpy as np

c = np.array([1,2])
print(c.shape)
d = np.array([[1],[2]]).transpose()
print(d.shape)

给予

(2,)
(1,2)

作为它的输出?不是吗

(1,2)
(1,2)

相反呢?我在Python2.7.3和Python3.2.3中都得到了这个


Tags: 项目importnumpyasnparrayprinttranspose
3条回答

快速修复:检查.ndim属性-如果它是2,则.shape属性将按预期工作。

原因:如果.ndim属性为2,则numpy报告的形状值符合约定。如果.ndim属性为1,则numpy只是以不同的方式报告形状。

更多讨论:当您向np.array传递列表列表时,.shape属性将与矩阵维度的标准概念(行、列)一致。

如果你只给np.array一个列表,那么numpy不会认为它手上有一个矩阵,而是以不同的方式报告形状。

问题是:numpy认为它有一个矩阵,还是认为它手上还有其他东西。

当您调用ndarray.shape属性时,您将得到一个元素数与数组维数相同的元组。长度,即行数,是第一个维度(shape[0]

  • 从数组开始:c=np.array([1,2])。这是一个普通的一维数组,所以它的形状是一个1元素元组,而shape[0]是元素的数目,所以c.shape = (2,)
  • 考虑一下c=np.array([[1,2]])。这是一个二维数组,有一行。第一行也是唯一一行是[1,2],这给了我们两列。因此,c.shape=(1,2)len(c)=1
  • 考虑一下c=np.array([[1,],[2,]])。另一个二维数组,有2行1列:c.shape=(2,1)len(c)=2
  • 考虑d=np.array([[1,],[2,]]).transpose():此数组与np.array([[1,2]])相同,因此其形状为(1,2)

另一个有用的属性是.size:这是所有维度上的元素数,对于数组cc.size = np.product(c.shape)

有关documentation中形状的详细信息。

len(c.shape)是数组的“深度”。

对于c,数组只是一个列表(向量),深度是1。
对于d,数组是一个列表列表,深度为2。

注:

c.transpose()
# array([1, 2])

它不是d,因此此行为不一致。

dt = d.transpose()
# array([[1],
#        [2]])
dt.shape # (2,1)

相关问题 更多 >