在2D数组中查找并替换特定值

时间:2018-10-17 23:02:18

标签: python python-3.x multidimensional-array

我有一个大型2D数组array,每个条目都是一个大型数字数组 :

array = [
            [1, 0, 3, ...],
            [5, 4, 1, ...],
            [1, 2, 3, ...],
            ...
        ]

2D数组中的所有数字都是0-5,我必须以某种方式查找并替换特定的数字,例如所有出现的数字3并用5替换

谢谢

3 个答案:

答案 0 :(得分:2)

可以通过简单的单行方式借助列表理解功能完成。

说您有一个列表列表:

a = [[1, 2, 3], [1, 2, 3], [1, 2, 3]]

,您想用2替换所有出现的4

[[_el if _el != 2 else 4 for _el in _ar] for _ar in a]

另一种选择是使用 numpy的where函数。来自文档字符串:

  

where(condition,[x,y])

     

根据x返回ycondition中的元素。

因此,就您而言(例如,您想再次将所有2替换为4):

import numpy as np

a = np.array([[1, 2, 3],
   [1, 2, 3],
   [1, 2, 3]])

np.where(a==2, 4, a)

如果要一次性替换多个值,可以执行以下操作: 假设您想将1替换为3,将3替换为5

ix=np.isin(array, [1,3])
vc=np.vectorize(lambda x: 3 if x == 1 else 5)
np.where(ix, vc(array), array)

如果要替换的值超过2个,例如要将列表[1,3,5]映射到[3, 5, -3],则可以定义一个简单的函数,如:

old_vals = [1,3,5]
new_vals = [3, 5, -3]
def switch_val(x):
    return new_vals[old_vals.index(x)] if x in old_vals else x

等等:

vc=np.vectorize(switch_val)
vc(array)

我们vectorized函数的位置。

希望能帮助您编写愉快的代码!

答案 1 :(得分:0)

for i in range(len(array)):
    for j in range(len(array[i])):
        if array[i][j] == value_you_are_looking_for:
            array[i][j] = new_value

这应该有效

答案 2 :(得分:0)

对于单个值,给定一个名为Arr的数组,例如:

Arr = np.array([[1,2,3],
                [1,2,3],
                [1,2,3]])

然后:

mask = Arr == 2

给予:

mask = np.array([[False,True,False],
                [False,True,False],
                [False,True,False]])

最后,将2替换为4:

newArr[mask] = 4

给予:

Arr = np.array([[1,4,3],
                [1,4,3],
                [1,4,3]])