我有一个很大的二维数组,
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
。
谢谢
这可以通过简单的一行代码通过列表理解来完成。
假设你有一个列表:
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)
我们对函数进行希望有所帮助,编码愉快!
这应该有效
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]])