gpt4 book ai didi

python - 切片 numpy 数组不会修改原始数组

转载 作者:行者123 更新时间:2023-11-30 22:09:10 25 4
gpt4 key购买 nike

我遇到了与数组的交互,我有点困惑。我可以解决这个问题,但根据我自己的理解,我想知道发生了什么。

本质上,我有一个正在尝试定制的数据文件,以便我可以将其作为我已经编写的一些代码的输入运行。这涉及到一些列、行等的计算。特别是,我还需要重新排列一些元素,其中原始数组没有像我预期的那样被修改。

import numpy as np

ex_data = np.arange(12).reshape(4,3)
ex_data[2,0] = 0 #Constructing some fake data

ex_data[ex_data[:,0] == 0][:,1] = 3

print ex_data

基本上,我会查看感兴趣的列,收集该列包含感兴趣的参数值的所有行,然后重新分配值。

通过上面的代码片段,我希望 ex_data 具有其第 1 列元素,如果其第 0 列元素等于 0,则被赋予值 3。但是我看到的是完全没有效果。

>>> ex_data
array([[ 0, 1, 2],
[ 3, 4, 5],
[ 0, 7, 8],
[ 9, 10, 11]])

在另一种情况下,如果我不“切片”我的“切片”数据文件,则重新分配将照常进行。

ex_data[ex_data[:,0] == 0] = 3
print ex_data

在这里,我希望我的整行(条件是第 0 列等于 0)填充为 3。这就是您所看到的。

>>> ex_data
array([[ 3, 3, 3],
[ 3, 4, 5],
[ 3, 3, 3],
[ 9, 10, 11]])

谁能解释一下交互作用吗?

最佳答案

In [368]: ex_data
Out[368]:
array([[ 0, 1, 2],
[ 3, 4, 5],
[ 0, 7, 8],
[ 9, 10, 11]])

第 0 列测试:

In [369]: ex_data[:,0]==0
Out[369]: array([ True, False, True, False])

该 bool 掩码可以应用于行,如下所示:

In [370]: ex_data[ex_data[:,0]==0,0]
Out[370]: array([0, 0]) # the 0's you expected

In [371]: ex_data[ex_data[:,0]==0,1]
Out[371]: array([1, 7]) # the col 1 values you want to replace

In [372]: ex_data[ex_data[:,0]==0,1] = 3
In [373]: ex_data
Out[373]:
array([[ 0, 3, 2],
[ 3, 4, 5],
[ 0, 3, 8],
[ 9, 10, 11]])

您尝试的索引:

In [374]: ex_data[ex_data[:,0]==0]
Out[374]:
array([[0, 3, 2],
[0, 3, 8]])

生成一个副本。分配 ...[:,1]=3 只是更改该副本,而不是原始数组。幸运的是,在这种情况下,它很容易使用

ex_data[ex_data[:,0]==0,1]

而不是

ex_data[ex_data[:,0]==0][:,1]

关于python - 切片 numpy 数组不会修改原始数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51996989/

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