我有一个大型2D数组array
,每个条目都是一个大型数字数组
:
array = [
[1, 0, 3, ...],
[5, 4, 1, ...],
[1, 2, 3, ...],
...
]
2D数组中的所有数字都是0-5,我必须以某种方式查找并替换特定的数字,例如所有出现的数字3
并用5
替换
谢谢
答案 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
返回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)
我们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]])