python - 使用旧值和新值列表替换 numpy 数组中的元素

标签 python arrays numpy

我想使用旧值和新值列表替换 numpy 数组中的元素。请参阅下面的代码示例(replace_old 是请求的方法)。该方法必须适用于 int、float 和 string 元素。我该怎么做?

import numpy as np

dat = np.hstack((np.arange(1,9), np.arange(1,4)))
print dat # [1 2 3 4 5 6 7 8 1 2 3]

old_val = [2, 5]
new_val = [11, 57]

new_dat = replace_old(dat, old_val, new_val)
print new_dat # [1 11 3 4 57 6 7 8 1 11 3]

最佳答案

您可以使用np.place :

>>> np.place(dat,np.in1d(dat,old_val),new_val)
>>> dat
array([ 1, 11,  3,  4, 57,  6,  7,  8,  1, 11,  3])

要创建mask数组,您可以使用np.in1d(arr1,arr2),它会给您:

a boolean array the same length as ar1 that is True where an element of ar1 is in ar2 and False otherwise

编辑:请注意,前面的配方将根据这些顺序替换old_values,并且正如@ajcr提到的,它不适用于其他数组,因此作为目前的通用方法我建议使用循环的以下方法(我认为这不是最好的方法):

>>> dat2 = np.array([1, 2, 1, 2])
>>> old_val = [1, 2]
>>> new_val = [33, 66]

>>> z=np.array((old_val,new_val)).T
>>> for i,j in z:
...    np.place(dat2,dat2==i,j)
... 
>>> dat2
array([33, 66, 33, 66])

在本例中,您创建一个新数组 (z),其中包含 old_valnew_val 中的相关对,然后您可以传递将它们复制到 np.place 并替换它们。

关于python - 使用旧值和新值列表替换 numpy 数组中的元素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31317992/

相关文章:

python - 如何为由另一个数组过滤的列中的元素设置值

arrays - Bash 数组脚本排除重复项

c++ - 使用递归查找数组中的第 k 个最小元素?

Php Preg_Match 获取数组中的引用字符串

python - 如何安装 libsandbox?我在安装过程中遇到一些问题

python - 用Python提取科学论文信息?

日期时间相关值的 Python Numpy 或 Pandas 线性插值

python - 变量出现在我的数据框中的第一个和最后一个日期

numpy - 查询SVM参数设置

python - 如何在 Matplotlib 的子图中单独绘制相同的图形?