我一直在查看和解释一些示例代码,但在理解一些切片语法的情况时遇到了一些困难。对于某些情况,我正在开发一个计算程序,该程序使用有限差分方法来近似方形区域上的温度。
下面是一些代码:
maxIter = 500
lenX = lenY = 20
delta = 1
Ttop = 100
Tbottom = 0
Tleft = 0
Tright = 0
Tguess = 30
T = np.empty((lenX, lenY))
T.fill(Tguess)
T[(lenY-1):, :] = Ttop
T[:1, :] = Tbottom
T[:, (lenX-1):] = Tright
T[:, :1] = Tleft
最后一点是我无法理解的。我不确定冒号和逗号的位置在 T[] 边界条件中到底起什么作用。代码的下一部分继续使用 T[i,j] 进行 for 循环。 就像看第一个一样,它似乎说在 T 切片的第一个索引中从 9 (lenY-1) 到列表末尾,而在第二个索引中不切片任何内容,然后它将其设置为 100。我明白这是在做沿顶部边界的温度为 100,我只是不确定目前的语法是如何发生的。
最佳答案
冒号表达式被传输为 slice
numpy 数组的对象。逗号创建一个元组。演示:
class A:
def __setitem__(self, target, data):
print(repr(target))
print(repr(data))
a = A()
a[17:, :] = 6
打印:
(slice(17, None, None), slice(None, None, None))
6
所以你也可以写:
a[(slice(17, None, None), slice(None, None, None))] = 6
在最后一行得到相同的结果。
类(例如 numpy 数组)有责任以有意义的方式解释它。
关于python - 尝试理解 python 矩阵中索引切片的语法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59223261/