Python 3.x 用numpy解释代码是如何工作的

Python 3.x 用numpy解释代码是如何工作的,python-3.x,array-broadcasting,Python 3.x,Array Broadcasting,这是我运行的代码: labels=[0,1,1,0,2,1,1,1,0,0] labels_ = np.zeros((10, 3)) labels_ 上述代码给出了输出: array([[0., 0., 0.], [0., 0., 0.], [0., 0., 0.], [0., 0., 0.], [0., 0., 0.], [0., 0., 0.], [0., 0., 0.], [0., 0.,

这是我运行的代码:

labels=[0,1,1,0,2,1,1,1,0,0]
labels_ = np.zeros((10, 3))
labels_
上述代码给出了输出:

array([[0., 0., 0.],
       [0., 0., 0.],
       [0., 0., 0.],
       [0., 0., 0.],
       [0., 0., 0.],
       [0., 0., 0.],
       [0., 0., 0.],
       [0., 0., 0.],
       [0., 0., 0.],
       [0., 0., 0.]])
array([[1., 0., 0.],
       [0., 1., 0.],
       [0., 1., 0.],
       [1., 0., 0.],
       [0., 0., 1.],
       [0., 1., 0.],
       [0., 1., 0.],
       [0., 1., 0.],
       [1., 0., 0.],
       [1., 0., 0.]])
现在当我在代码“block 2”下运行时

它给出了输出:

array([[0., 0., 0.],
       [0., 0., 0.],
       [0., 0., 0.],
       [0., 0., 0.],
       [0., 0., 0.],
       [0., 0., 0.],
       [0., 0., 0.],
       [0., 0., 0.],
       [0., 0., 0.],
       [0., 0., 0.]])
array([[1., 0., 0.],
       [0., 1., 0.],
       [0., 1., 0.],
       [1., 0., 0.],
       [0., 0., 1.],
       [0., 1., 0.],
       [0., 1., 0.],
       [0., 1., 0.],
       [1., 0., 0.],
       [1., 0., 0.]])

有人能解释一下代码“block 2”中发生了什么吗?

当您使用方括号索引NumPy数组时,括号中的第一个数字表示行,第二个数字表示列,就像战舰游戏一样

现在,您正在使用名为
labels
的列表和由
np.arange
创建的数组为名为
labels
的零数组编制索引:

标签=数组([[0,0,0.]), [0., 0., 0.], [0., 0., 0.], [0., 0., 0.], [0., 0., 0.], [0., 0., 0.], [0., 0., 0.], [0., 0., 0.], [0., 0., 0.], [0., 0., 0.]] 标签=[0,1,1,0,2,1,1,1,0,0] np.arange(10)=数组([0,1,2,3,4,5,6,7,8,9]) 如前所述,NumPy索引使用
[行,列]
,您使用的是索引
[np.arange(10),标签]
。当您为NumPy提供多个索引值时,它会依次使用它们,因此它会在
np.arange(10)中查找第一个值
数组和
标签
列表中的第一项,并将它们用作零数组
标签
的行索引和列索引

我们知道
np.arange(10)
中的第一项是0,而
labels
中的第一项也是0,因此它在
labels\uuu
列表中查找[0,0]——第一行和第一列。您告诉它将
=1时的索引设置为1,它就这样做了

请注意,Python从0开始计数,因此第一行是第0行,第二行是第1行,第三行是第2行,以此类推。还请注意,我们将第一行计为顶行,第一列计为左列

现在我们有:

标签=数组([[1,0,0.]), [0., 0., 0.], [0., 0., 0.], [0., 0., 0.], [0., 0., 0.], [0., 0., 0.], [0., 0., 0.], [0., 0., 0.], [0., 0., 0.], [0., 0., 0.]]
接下来,它查看
np.arange(10)
labels
中的第二个值,我们知道
np.arange(10)[1]=1
labels[1]=1
,因此它将第1行(第二行)和第1列(第二列)设置为1

现在我们有:

标签=数组([[1,0,0.]), [0., 1., 0.], [0., 0., 0.], [0., 0., 0.], [0., 0., 0.], [0., 0., 0.], [0., 0., 0.], [0., 0., 0.], [0., 0., 0.], [0., 0., 0.]] 现在我们在
np.arange(10)
labels
中查找第三项,得到一个索引[2,1],这是
labels\uuu
数组的第三行和第二列,我们将其设置为`:

标签=数组([[1,0,0.]), [0., 1., 0.], [0., 1., 0.], [0., 0., 0.], [0., 0., 0.], [0., 0., 0.], [0., 0., 0.], [0., 0., 0.], [0., 0., 0.], [0., 0., 0.]] 我们一直这样做,直到列表中用于索引的数字用完为止