numpy数组的大小混乱

问题描述 投票:1回答:3

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

a = np.array([1,2,3])
a.size = (3, )
------------------------
b = np.array([[2,1,3,5],
             [2,2,5,1],
             [3,6,99,5]])
b.size = (3,4)

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

python arrays numpy size numpy-ndarray
3个回答
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
投票

您应该抵制将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个整数来指定其形状。

在实践中,组合1-D和2-D阵列之间的计算对于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)

0
投票

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

数组维度的元组。

ndarray.shape只返回一个形状元组。

In [21]: a.shape
Out[21]: (3,)

这只是意味着a是一个包含3个条目的一维数组。

如果形状元组将其返回为(1,3),则a将成为2D数组。为此您需要使用:

In [23]: a = a[np.newaxis, :]

In [24]: a.shape
Out[24]: (1, 3)

由于数组b是2D,因此形状元组有两个条目。

In [22]: b.shape
Out[22]: (3, 4)
© www.soinside.com 2019 - 2024. All rights reserved.