我已经开始学习numpy了,我经历了一些简单的例子,在这些例子中我遇到了numpy数组形状的变化。我们如何用矩阵来解释numpy数组?
如果我举个例子-
import numpy as np
a = np.zeros(5)
a.shape
返回(5,)
print(a)
返回
array([0., 0., 0., 0., 0.])
这是否意味着它有5行1列或5列1行?
此外,如果我写下
a.shape = (5,1)
print(a)
array([[0.],
[0.],
[0.],
[0.],
[0.]])
一般来说,我对numpy数组的形状有点迷惑。任何帮助都是非常感谢的。
发布于 2021-09-13 19:54:50
格式为(m,n),其中m是2d阵列的行数,n是列数。
然而,你的情况是一个一维数组,这就是为什么你得到(m,)。这基本上意味着它既不是行也不是列,只有五个项目,就像一个列表。在这种情况下,没有第二个维度。如果你想添加第二个维度,有一堆函数恰好从我的脑海中消失
发布于 2021-09-13 19:50:19
在(m, n)
中,形状元组返回一个元组,m
指的是“行数”,而n
指的是列数。
所以(5, 1)
应该是5行1列。
(5,)
只是一个一维的数组,5行...但是一维向量不是由列数和行数引用的,因为它不是嵌套的。它只是一个包含五个元素的数组。
正如@TimRoberts提到的,numpy数组可以有任意数量的维数。例如图像,具有具有3个元素的元组的形状,这3个元素是行、列和通道,对于RGB,它将具有3个通道,而对于RGBA,它将是4个通道。这将是一个3d数组的示例。
发布于 2021-09-13 20:04:21
让我们做一个有12个项目的一维数组:
In [150]: a = np.arange(12)
In [151]: a
Out[151]: array([ 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11])
重塑为2d。这是view
,形状不同,但它共享数据缓冲区。
In [152]: a.reshape(3,4)
Out[152]:
array([[ 0, 1, 2, 3],
[ 4, 5, 6, 7],
[ 8, 9, 10, 11]])
另一个视图,三维:
In [153]: a.reshape(2,3,2)
Out[153]:
array([[[ 0, 1],
[ 2, 3],
[ 4, 5]],
[[ 6, 7],
[ 8, 9],
[10, 11]]])
再一次是二维视图:
In [154]: a.reshape(6,2)
Out[154]:
array([[ 0, 1],
[ 2, 3],
[ 4, 5],
[ 6, 7],
[ 8, 9],
[10, 11]])
或者3d:
In [155]: a.reshape(1,1,12)
Out[155]: array([[[ 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11]]])
a.reshape(1,12,1,1)
会占用更多的空间。:)
并进一步将视图与不同的order
混淆
In [156]: a.reshape(3,4, order='F')
Out[156]:
array([[ 0, 3, 6, 9],
[ 1, 4, 7, 10],
[ 2, 5, 8, 11]])
https://stackoverflow.com/questions/69171544
复制