python - 尝试理解 python 矩阵中索引切片的语法

标签 python arrays numerical-analysis numpy-slicing

我一直在查看和解释一些示例代码,但在理解一些切片语法的情况时遇到了一些困难。对于某些情况,我正在开发一个计算程序,该程序使用有限差分方法来近似方形区域上的温度。

下面是一些代码:

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/

相关文章:

python - 如何迭代不区分大小写的已排序字典项?

python - 编写一个在调用 list(c) 和 dict(c) 时返回不同值的类

c - 如何近似泊松分布 $P(n,lambda)$

ruby - 从 Ruby 中的数组中查找最高、最低、总计、平均值和中位数

C++删除动态数组的对象

computational-geometry - 由坐标集定义的区域的数值积分?

python - 当尝试将函数与Python中的图像匹配时,有没有办法计算残差?

python - 有没有办法在 Dask/Distributed 中注册 Jupyter Notebook 进度条小部件而不是文本进度条?

python - 具有不确定性的两个数据点的线性拟合的置信区间

javascript - 如何使用循环从数组中检索多个坐标之间的距离?