查找并替换二维数组中的特定值

ssa*_*sal 3 python multidimensional-array python-3.x

我有一个大的二维数组array,每个条目都是一个大的数字数组:

array = [
            [1, 0, 3, ...],
            [5, 4, 1, ...],
            [1, 2, 3, ...],
            ...
        ]
Run Code Online (Sandbox Code Playgroud)

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

谢谢

joj*_*ojo 5

这可以通过简单的一行中的列表理解来完成。

假设您有一个列表列表:

a = [[1, 2, 3], [1, 2, 3], [1, 2, 3]]
Run Code Online (Sandbox Code Playgroud)

并且您想将所有出现的 替换24

[[_el if _el != 2 else 4 for _el in _ar] for _ar in a]
Run Code Online (Sandbox Code Playgroud)

另一种选择是使用numpy 的wherefunction。从文档字符串:

其中(条件,[x,y])

返回元素,来自xy,具体取决于condition

因此,就您而言(假设您想再次将所有内容替换为24

import numpy as np

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

np.where(a==2, 4, a)
Run Code Online (Sandbox Code Playgroud)

如果您想一次性替换多个值,您可以执行以下操作:假设您想替换13和:35

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

如果要替换的值超过 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
Run Code Online (Sandbox Code Playgroud)

所以:

vc=np.vectorize(switch_val)
vc(array)
Run Code Online (Sandbox Code Playgroud)

我们对函数进行向量化。

希望有所帮助,编码愉快!