2024-06-02 13:02:17 发布
网友
为什么这个项目
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中都得到了这个
快速修复:检查.ndim属性-如果它是2,则.shape属性将按预期工作。
原因:如果.ndim属性为2,则numpy报告的形状值符合约定。如果.ndim属性为1,则numpy只是以不同的方式报告形状。
更多讨论:当您向np.array传递列表列表时,.shape属性将与矩阵维度的标准概念(行、列)一致。
如果你只给np.array一个列表,那么numpy不会认为它手上有一个矩阵,而是以不同的方式报告形状。
问题是:numpy认为它有一个矩阵,还是认为它手上还有其他东西。
当您调用ndarray的.shape属性时,您将得到一个元素数与数组维数相同的元组。长度,即行数,是第一个维度(shape[0])
ndarray
.shape
shape[0]
c=np.array([1,2])
c.shape = (2,)
c=np.array([[1,2]])
[1,2]
c.shape=(1,2)
len(c)=1
c=np.array([[1,],[2,]])
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)。
.size
c
c.size = np.product(c.shape)
有关documentation中形状的详细信息。
len(c.shape)是数组的“深度”。
len(c.shape)
对于c,数组只是一个列表(向量),深度是1。 对于d,数组是一个列表列表,深度为2。
d
注:
c.transpose() # array([1, 2])
它不是d,因此此行为不一致。
dt = d.transpose() # array([[1], # [2]]) dt.shape # (2,1)
快速修复:检查.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
:这是所有维度上的元素数,对于数组c
c.size = np.product(c.shape)
。有关documentation中形状的详细信息。
len(c.shape)
是数组的“深度”。对于
c
,数组只是一个列表(向量),深度是1。对于
d
,数组是一个列表列表,深度为2。注:
它不是
d
,因此此行为不一致。相关问题 更多 >
编程相关推荐