强基初中数学&学Python——第230课 数字和数学第三方模块NumPy:菜鸟入门(6)


创建矩阵
  通过传递Python列表的列表给NumPy来创建二维数组(或“矩阵”)。

>>> data = np.array([[1, 2], [3, 4], [5, 6]])
>>> data
array([[1, 2],
       [3, 4],
       [5, 6]])

  在处理矩阵时,索引和切片操作非常有用:

>>> data[0, 1]
2
>>> data[1:3]
array([[3, 4],
       [5, 6]])
>>> data[0:2, 0]
array([1, 3])

  聚合矩阵的方式与聚合向量的方式相同:

>>> data.max()
6
>>> data.min()
1
>>> data.sum()
21

  可以聚合矩阵中的所有值,也可以使用axis参数跨列或行聚合这些值。为了说明这一点,我们来看一个稍微修改过的数据集:

>>> data = np.array([[1, 2], [5, 3], [4, 6]])
>>> data
array([[1, 2],
       [5, 3],
       [4, 6]])
>>> data.max(axis=0)
array([5, 6])
>>> data.max(axis=1)
array([2, 5, 6])

  创建矩阵后,可以使用算术运算符对两个形状(shape)相同的矩阵进行加法和乘法。注:原文是“the same size”是错误的,应该是“the same shape”。

>>> data = np.array([[1, 2], [3, 4]])
>>> ones = np.array([[1, 1], [1, 1]])
>>> data + ones
array([[2, 3],
       [4, 5]])

  有一种变化情况是其中一个矩阵只有一行或一列,可以认为在加和乘操作之前,NumPy会自动“复制”成形状相同的矩阵后再运算(实际使用广播规则进行操作)。

>>> data = np.array([[1, 2], [3, 4], [5, 6]])
>>> ones_row = np.array([[1, 1]])
>>> data + ones_row
array([[2, 3],
       [4, 5],
       [6, 7]])

  请注意,当NumPy打印N维数组时,最后一个轴绕得最快,而第一个轴绕的最慢。例如:

>>> np.ones((4, 3, 2))
array([[[1., 1.],
        [1., 1.],
        [1., 1.]],

       [[1., 1.],
        [1., 1.],
        [1., 1.]],

       [[1., 1.],
        [1., 1.],
        [1., 1.]],

       [[1., 1.],
        [1., 1.],
        [1., 1.]]])

  通常情况下,只往类似ones()和zeros()这样的函数,以及用于生成随机数的random.Generator类传入生成的元素数,NumPy会初始化成一维数组

>>> np.ones(3)
array([1., 1., 1.])
>>> np.zeros(3)
array([0., 0., 0.])
>>> rng = np.random.default_rng()  # the simplest way to generate random numbers
>>> rng.random(3) 
array([0.63696169, 0.26978671, 0.04097352])

  如果往ones(),zeros()和random()传入描述矩阵维数的元组(两个整数的元组)时,NumPy初始化成一个2D数组(矩阵):

>>> np.ones((3, 2))
array([[1., 1.],
       [1., 1.],
       [1., 1.]])
>>> np.zeros((3, 2))
array([[0., 0.],
       [0., 0.],
       [0., 0.]])
>>> rng.random((3, 2)) 
array([[0.01652764, 0.81327024],
       [0.91275558, 0.60663578],
       [0.72949656, 0.54362499]])  # may vary

  阅读有关在数组创建例程中填充有0、1、其他值或未初始化值的数组的详细信息,请打开:https://numpy.org/doc/stable/reference/routines.array-creation.html#routines-array-creation。