numpy数组的大小混乱

时间:2018-02-11 00:48:01

标签: python arrays numpy size numpy-ndarray

Python numpy数组'大小'让我很困惑

int

'b'是有意义的,因为它每行有3行4列 但'a'尺寸=(3,)怎么样?不应该是(1,3),因为它的1行和3列?

3 个答案:

答案 0 :(得分:1)

不,形状(1,3)的numpy.ndarray看起来像:

np.array([[1,2,3]])

考虑形状如何与索引相对应:

arr[0, ...]  #First row

我还有三个选项,即:

arr[0,0]
arr[0,1]
arr[0,2]

尝试使用1维数组

答案 1 :(得分:1)

您应该反对将numpy数组视为的冲动,而是将它们视为具有形状。这是区分np.arraynp.matrix的重要一点:

x = np.array([1, 2, 3])
print(x.ndim, x.shape)  # 1 (3,)

y = np.matrix([1, 2, 3])
print(y.ndim, y.shape)  # 2 (1, 3)

n -D数组只能使用 n 整数来表示其形状。因此,1-D数组仅使用1个整数来指定其形状。

实际上,在{3}和{ - 2}数组之间组合计算不是numpy的问题,而且在语法上是干净的,因为在Python 3.5中引入了@矩阵运算。因此,很少需要诉诸np.matrix以满足预期行数和列数的冲动。

在极少数需要2维的情况下,你仍然可以使用numpy.array进行一些操作:

a = np.array([1, 2, 3])[:, None]  # equivalent to np.array([[1], [2], [3]])
print(a.ndim, a.shape)  # 2 (3, 1)

b = np.array([[1, 2, 3]])  # equivalent to np.array([1, 2, 3])[:, None].T
print(b.ndim, b.shape)  # 2 (1, 3)

答案 2 :(得分:0)

我认为你的意思是ndarray.shape。在这种情况下,不需要混淆。从ndarray.shape引用文档:

  

数组维度的元组。

In [21]: a.shape Out[21]: (3,) 只返回一个形状元组。

a

这只是意味着(1,3)是一个包含3个条目的一维数组。

如果形状元组将其返回为a,则In [23]: a = a[np.newaxis, :] In [24]: a.shape Out[24]: (1, 3) 将成为2D数组。为此你需要使用:

b

由于数组In [22]: b.shape Out[22]: (3, 4) 是2D,因此形状元组有两个条目。

{{1}}