python numpy 变异选择
python numpy mutate selection
我在 numpy 中遇到了一个奇怪的错误(?):
给定一个嵌套数组:
p = np.asarray([[1., 2., 3.], [-4., -5., -6.], [1,2,-4]], dtype=np.float32)
也就是
array([[ 1., 2., 3.],
[-4., -5., -6.],
[ 1., 2., -4.]], dtype=float32)
我想像
这样有条件地改变数组的第三个条目
p[p[:, 2] <0][:, 2] *= -1
然而,最后一个语句不会改变 p。
我希望输出像
array([[ 1., 2., 3.],
[-4., -5., 6.],
[ 1., 2., 4.]], dtype=float32)
但实际上它什么也没做。 p 保持不变。
我测试了很多东西,但我没有得出为什么 p 不发生变异的结论。
当然我可以通过某种方式解决这个问题,但这对我来说似乎很奇怪。
提前干杯并感谢。
丹尼尔
您修改了原始数组的副本。如果你想改变原始数组,你应该使用这样的东西:
p[p[:, 2] <0, 2] *= -1
p[boolean_array]
returns 一个副本,所以你修改了你的副本,但保持原件不变。例如,您可以使用 np.where
代替。类似于 p[:,2] = np.where(p[:,2], p[:,2], -p[:,2])
颠倒方括号的顺序应该可以解决问题:
p[:, 2][p[:, 2] < 0] *= -1
布尔索引 returns 一个副本,除非您正在对其进行赋值,这可以通过将其作为最后一个索引操作来实现。
我在 numpy 中遇到了一个奇怪的错误(?): 给定一个嵌套数组:
p = np.asarray([[1., 2., 3.], [-4., -5., -6.], [1,2,-4]], dtype=np.float32)
也就是
array([[ 1., 2., 3.],
[-4., -5., -6.],
[ 1., 2., -4.]], dtype=float32)
我想像
这样有条件地改变数组的第三个条目p[p[:, 2] <0][:, 2] *= -1
然而,最后一个语句不会改变 p。 我希望输出像
array([[ 1., 2., 3.],
[-4., -5., 6.],
[ 1., 2., 4.]], dtype=float32)
但实际上它什么也没做。 p 保持不变。 我测试了很多东西,但我没有得出为什么 p 不发生变异的结论。
当然我可以通过某种方式解决这个问题,但这对我来说似乎很奇怪。 提前干杯并感谢。 丹尼尔
您修改了原始数组的副本。如果你想改变原始数组,你应该使用这样的东西:
p[p[:, 2] <0, 2] *= -1
p[boolean_array]
returns 一个副本,所以你修改了你的副本,但保持原件不变。例如,您可以使用 np.where
代替。类似于 p[:,2] = np.where(p[:,2], p[:,2], -p[:,2])
颠倒方括号的顺序应该可以解决问题:
p[:, 2][p[:, 2] < 0] *= -1
布尔索引 returns 一个副本,除非您正在对其进行赋值,这可以通过将其作为最后一个索引操作来实现。