gpt4 book ai didi

python - Numpy 索引 - 关于奇怪行为/不一致的问题

转载 作者:行者123 更新时间:2023-11-28 20:09:57 24 4
gpt4 key购买 nike

这是一个基于我今天早些时候提出的问题的知识主题。这些是我亲眼目睹的 numpy 行为中的一些奇怪的不一致。

首先,如果您运行这段代码:

A = ones((10,4))
view = A[:,1]
view.fill(7)
A

这会将第 2 列更改为全 7,因为数组是从 0 开始索引的,而切片只是同一矩阵的 View 。太棒了,这正是我想要发生的事情。

现在,如果你运行这个:

A = ones((10,4))
view = A[:,1:2]
view.fill(7)
A

它的效果与第一个示例相同。为什么a:b指定了a到b-1的列?这在语言中有特定的原因吗?似乎如果我输入 1:3,那应该给我第 1、2 和 3 列 - 而不是 1 和 2。

最后,如果你运行这个:

A = ones((10,4))
view = A[:,(1,2)]
view.fill(7)
A

A 没有副作用。看起来如果您使用元组创建 View ,它不会以某种方式正确地传播原始矩阵上的任何进一步的副作用。有什么见解吗?

最佳答案

Why is it that a:b specifies the columns from a to b-1?

这就是所有 Python 的工作方式,并且是许多编程的传统。它允许轻松计算很多事情——举个例子,它让切片的长度 x[a:a + n]n 并允许 x[:n]x[n:]x 分成两部分。您会习惯它,从长远来看,大多数程序员更喜欢它。

It looks like if you create a view using a tuple, it somehow doesn't correctly propagate any further side effects on the original matrix.

当您执行 A[:, (1, 2)] 时,您没有 View ,而是一个新数组。当你只做切片时,比如 A[:, 1:3],你仍然有连续的内存用于数组的 strip ,所以有 View 是有意义的。当您使用可迭代对象(为了更好地理解您使用了 (0, 2))来挑选数组的片段时,使用类似 View 的 bahvior 将是低效且笨拙的。

关于python - Numpy 索引 - 关于奇怪行为/不一致的问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9421057/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com