查找并替换二维数组中的特定值[关闭]

问题描述 投票:0回答:3

我有一个很大的二维数组,

array
,每个条目都是一个很大的数字数组 :

import numpy as np

arr = np.array([[0, 0, 0, 4, 4, 0, 4, 4, 4, 0, 3, 0, 4, 0, 3, 0, 4, 0, 3, 3, 0, 0,
    3, 0, 4, 0, 3, 4, 1, 1, 4, 5, 3, 2, 1, 2, 0, 3, 0, 0, 3, 3, 0, 3,
    3, 0, 2, 2, 4, 3, 3, 3, 3, 3, 0, 4, 0, 0, 4, 2, 4, 3],
   [1, 4, 1, 0, 0, 1, 1, 0, 0, 1, 1, 0, 1, 1, 0, 3, 3, 0, 0, 0, 1, 1,
    0, 3, 0, 0, 3, 3, 1, 1, 3, 3, 4, 2, 4, 3, 3, 1, 1, 1, 1, 0, 0, 3,
    0, 1, 1, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 3, 5, 5, 3, 1]], dtype=int)

二维数组中的所有数字都从 0-5,我必须以某种方式查找并替换特定数字,例如,所有出现的数字

3
并将其替换为
5

谢谢

python python-3.x multidimensional-array
3个回答
5
投票

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

假设你有一个列表:

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

 函数。来自文档字符串:

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

返回元素,来自

x

y
,具体取决于 
condition

因此,就您而言(假设您想再次将所有

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)
我们对函数进行

向量化。

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


0
投票
这应该有效


0
投票

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]])

	
© www.soinside.com 2019 - 2024. All rights reserved.