问题描述
我正在研究the 100 numpy exercise list。其中一个问题要求您设计一个所有数组,然后添加一个0的边框。
有两种解决方法。第一个很有意义(仅使用.pad
方法,等等),第二个则依赖于更复杂的切片。为此给出的代码如下:
import numpy as np
Z = np.ones((5,5))
Z[:,[0,-1]] = 0
Z[[0,-1],:] = 0
print(Z)
任何人都可以帮我弄清楚这段代码中发生了什么吗?我尝试过使用它,但是更改它的某些方式并没有很多直观的意义。例如,如果我只删除第2行,似乎没有任何变化?但是,如果我将第3行中的第二个值从-1更改为3,则会发生很多变化。
作为次要附录,有人可以向我解释为什么np.ones
等方法需要两组括号吗?
解决方法
- 第1行:制作一个形状为
(5,5)
的1的数组(因此有两组括号:一组用于调用函数,一组用于提供形状元组)。 - 第2行:将第一个和最后一个(索引-1)列设置为0。拆开切片:
:
表示“第一维中的所有内容”(即所有行)[0,-1]
的意思是“第一个和最后一个”(您可以使用NumPy中的列表或数组进行索引,而不仅仅是整数)。 - 第3行:将第一个和最后一个行设置为0。
- 第4行:打印出来。
如果删除第2行,则有些变化,请再次查看。