gpt4 book ai didi

python - 如何根据条件设置 `np.array()` 中的单元格值?

转载 作者:太空狗 更新时间:2023-10-30 01:13:30 24 4
gpt4 key购买 nike

我有一个 numpy 数组和该数组中的有效值列表:

import numpy as np
arr = np.array([[1,2,0], [2,2,0], [4,1,0], [4,1,0], [3,2,0], ... ])
valid = [1,4]

是否有一种很好的 pythonic 方法来将所有不在有效值列表中的数组值设置为零就地执行?完成此操作后,列表应如下所示:

               [[1,0,0], [0,0,0], [4,1,0], [4,1,0], [0,0,0], ... ]

以下代码在内存中创建数组副本,这对大型数组不利:

arr = np.vectorize(lambda x: x if x in valid else 0)(arr)

这让我很烦恼,现在我遍历每个数组元素并将其设置为零,如果它在有效列表中。

编辑:我找到了一个 answer建议没有就地功能来实现这一点。也停止更改我的空格。更容易看到 arr 中的变化。

最佳答案

您可以使用 np.place用于原位更新-

np.place(arr,~np.in1d(arr,valid),0)

sample 运行-

In [66]: arr
Out[66]:
array([[1, 2, 0],
[2, 2, 0],
[4, 1, 0],
[4, 1, 0],
[3, 2, 0]])

In [67]: np.place(arr,~np.in1d(arr,valid),0)

In [68]: arr
Out[68]:
array([[1, 0, 0],
[0, 0, 0],
[4, 1, 0],
[4, 1, 0],
[0, 0, 0]])

同样,也可以使用 np.put -

np.put(arr,np.where(~np.in1d(arr,valid))[0],0)

sample 运行-

In [70]: arr
Out[70]:
array([[1, 2, 0],
[2, 2, 0],
[4, 1, 0],
[4, 1, 0],
[3, 2, 0]])

In [71]: np.put(arr,np.where(~np.in1d(arr,valid))[0],0)

In [72]: arr
Out[72]:
array([[1, 0, 0],
[0, 0, 0],
[4, 1, 0],
[4, 1, 0],
[0, 0, 0]])

关于python - 如何根据条件设置 `np.array()` 中的单元格值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34699641/

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