如何创建一个 8*8 的 numpy 矩阵

how to create a numpy matrix of 8*8

我正在尝试制作一个 8*8 的矩阵,所以我使用了这个:

s=np.indices((8,8))

输出:

array([[[0, 0, 0, 0, 0, 0, 0, 0],
        [1, 1, 1, 1, 1, 1, 1, 1],
        [2, 2, 2, 2, 2, 2, 2, 2],
        [3, 3, 3, 3, 3, 3, 3, 3],
        [4, 4, 4, 4, 4, 4, 4, 4],
        [5, 5, 5, 5, 5, 5, 5, 5],
        [6, 6, 6, 6, 6, 6, 6, 6],
        [7, 7, 7, 7, 7, 7, 7, 7]],

       [[0, 1, 2, 3, 4, 5, 6, 7],
        [0, 1, 2, 3, 4, 5, 6, 7],
        [0, 1, 2, 3, 4, 5, 6, 7],
        [0, 1, 2, 3, 4, 5, 6, 7],
        [0, 1, 2, 3, 4, 5, 6, 7],
        [0, 1, 2, 3, 4, 5, 6, 7],
        [0, 1, 2, 3, 4, 5, 6, 7],
        [0, 1, 2, 3, 4, 5, 6, 7]]])

但是,我只想要一个看起来像第一个的矩阵。

试试 this?

import numpy as np

zeors_array = np.zeros( (8, 8) )
print(zeors_array)

有很多方法可以做到这一点:

  1. np.indices() 结果的第一个元素
np.indices((8,8))[0]
  1. 重复/平铺np.arange()
  2. 的结果
np.tile(np.arange(8), (8, 1)).T
  1. 创建一个 8x8 的零数组并添加一个包含数字 0-7 的列向量。让广播来处理剩下的事情
np.zeros((8, 8)) + np.arange(8)[:, None]
# or 
(np.zeros((8, 8)) + np.arange(8)).T
  1. 将包含数字 0-7 的 8x1 列向量与包含 8 个 1 的行向量相乘。还使用广播
np.arange(8)[:, None] * np.ones((1, 8))
# or 
(np.ones((8, 1)) * np.arange(8)).T

所有这些都给出相同的结果(除了 dtype -- 前两个 return int 数组,其余 return float 数组, 但改变类型还是很容易的):

array([[0., 0., 0., 0., 0., 0., 0., 0.],
       [1., 1., 1., 1., 1., 1., 1., 1.],
       [2., 2., 2., 2., 2., 2., 2., 2.],
       [3., 3., 3., 3., 3., 3., 3., 3.],
       [4., 4., 4., 4., 4., 4., 4., 4.],
       [5., 5., 5., 5., 5., 5., 5., 5.],
       [6., 6., 6., 6., 6., 6., 6., 6.],
       [7., 7., 7., 7., 7., 7., 7., 7.]])

找出哪个最有效留作 reader 的练习。