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.]]
我们一直这样做,直到列表中用于索引的数字用完为止