为什么这个程序
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中都有这个
gev0vcfq1#
当你调用一个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:这是所有维度上的元素数,对于一个数组c``c.size = np.product(c.shape).有关形状的详细信息,请参见文档。
.size
c``c.size = np.product(c.shape)
4bbkushb2#
len(c.shape)是阵列的"深度"。对于c,数组只是一个列表(向量),深度为1。对于d,数组是列表的列表,深度为2。注:
len(c.shape)
c
d
c.transpose() # array([1, 2])
其不是d,因此该行为不是不一致的。
dt = d.transpose() # array([[1], # [2]]) dt.shape # (2,1)
x8diyxa73#
快速修复:检查. ndim属性-如果它是2,那么. shape属性将按您预期的方式工作。原因:如果. ndim属性为2,则numpy报告符合约定的形状值;如果. ndim属性为1,则numpy仅以不同的方式报告形状。更多对话:当你给np. array传递一个列表的列表时,. shape属性将符合矩阵维数的标准概念:(行、列)。如果你只给np.array传递一个列表,那么numpy就不会认为它手上有一个矩阵,而是以一种不同的方式报告形状。问题是:numpy认为它有一个矩阵,还是它认为它手上有别的东西。
ha5z0ras4#
transpose不更改数组的维数。如果为c.ndim == 1,则为c.transpose() == c。请尝试:
transpose
c.ndim == 1
c.transpose() == c
c = np.array([1,2]) print c.shape print c.T.shape c = np.atleast_2d(c) print c.shape print c.T.shape
z9gpfhce5#
来自Matlab,我也发现一维数组不组织为(row_count,colum_count)很困难我的函数必须一致地响应一维ndarray,如[x1,x2,x3]或数组列表[[x1,x2,x3],[x1,x2,x3],[x1,x2,x3]]。这对我很有效:
dim = np.shape(subtract_matrix)[-1]
拾取最后一个维度。
5条答案
按热度按时间gev0vcfq1#
当你调用一个
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)
.有关形状的详细信息,请参见文档。
4bbkushb2#
len(c.shape)
是阵列的"深度"。对于
c
,数组只是一个列表(向量),深度为1。对于
d
,数组是列表的列表,深度为2。注:
其不是
d
,因此该行为不是不一致的。x8diyxa73#
快速修复:检查. ndim属性-如果它是2,那么. shape属性将按您预期的方式工作。
原因:如果. ndim属性为2,则numpy报告符合约定的形状值;如果. ndim属性为1,则numpy仅以不同的方式报告形状。
更多对话:当你给np. array传递一个列表的列表时,. shape属性将符合矩阵维数的标准概念:(行、列)。
如果你只给np.array传递一个列表,那么numpy就不会认为它手上有一个矩阵,而是以一种不同的方式报告形状。
问题是:numpy认为它有一个矩阵,还是它认为它手上有别的东西。
ha5z0ras4#
transpose
不更改数组的维数。如果为c.ndim == 1
,则为c.transpose() == c
。请尝试:z9gpfhce5#
来自Matlab,我也发现一维数组不组织为(row_count,colum_count)很困难
我的函数必须一致地响应一维ndarray,如[x1,x2,x3]或数组列表[[x1,x2,x3],[x1,x2,x3],[x1,x2,x3]]。
这对我很有效:
拾取最后一个维度。