Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/305.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 查找并替换二维数组中的特定值_Python_Python 3.x_Multidimensional Array - Fatal编程技术网

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

Python 查找并替换二维数组中的特定值,python,python-3.x,multidimensional-array,Python,Python 3.x,Multidimensional Array,我有一个大的2D数组,数组,每个条目都是一个大的数字数组 : 2D数组中的所有数字都是0-5,我必须以某种方式找到并替换特定的数字,例如,所有出现的数字3,并替换为5 谢谢 这应该行得通 如果您有一个名为Arr的数组,那么这对于单个值应该有效,例如: Arr = np.array([[1,2,3], [1,2,3], [1,2,3]]) 然后: 给出: mask = np.array([[False,True,False],

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

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

谢谢

这应该行得通


如果您有一个名为Arr的数组,那么这对于单个值应该有效,例如:

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

给出:

mask = np.array([[False,True,False],
                [False,True,False],
                [False,True,False]])
Arr = np.array([[1,4,3],
                [1,4,3],
                [1,4,3]])
最后,将2替换为4:

newArr[mask] = 4
给出:

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

对于单个值,假设您有一个名为Arr的数组,那么:

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

给出:

mask = np.array([[False,True,False],
                [False,True,False],
                [False,True,False]])
Arr = np.array([[1,4,3],
                [1,4,3],
                [1,4,3]])
最后,将2替换为4:

newArr[mask] = 4
给出:

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

这可以用一行简单的列表理解来完成

假设您有一个列表:

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]
import numpy as np

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

np.where(a==2, 4, a)
另一个选项是使用numpy的函数。从文档字符串:

其中(条件[x,y])

根据
条件
,从
x
y
返回元素

因此,在您的情况下(假设您想再次将所有
2
替换为
4
):

如果要一次性替换多个值,可以执行以下操作: 假设您要将
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)
如果有两个以上的值要替换,假设您想将列表映射到
[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)
在这里我们可以看到函数


希望对大家有帮助,编码快乐

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

假设您有一个列表:

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]
import numpy as np

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

np.where(a==2, 4, a)
另一个选项是使用numpy的函数。从文档字符串:

其中(条件[x,y])

根据
条件
,从
x
y
返回元素

因此,在您的情况下(假设您想再次将所有
2
替换为
4
):

如果要一次性替换多个值,可以执行以下操作: 假设您要将
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)
如果有两个以上的值要替换,假设您想将列表映射到
[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)
在这里我们可以看到函数


希望对大家有帮助,编码快乐

您能否提供一个?正如您所说的“特定号码”,您搜索的号码超过1个是否正确?你知道这些数字是什么吗?是的,数组中唯一的数字是从0到5,所以我必须用-5替换1,用-3替换2,用1替换3,用3替换4,用5替换5。这个问题的可能重复对我来说似乎并不清楚。你能提供一个吗?正如你所说的“特定数字”,你搜索的不止一个数字正确吗?你知道这些数字是什么吗?是的,数组中唯一的数字是0-5,所以我必须用-5替换1,用-3替换2,用1替换3,用3替换4,用5替换5。这个问题的可能重复对我来说似乎不清楚。谢谢,我尝试了这个表单,但由于某些原因它没有工作,它只是为范围内的i(len(new_set)):为范围内的j(len(new_set[i]):如果new_set[i][j]==1:new_set[i][j]=-5打印(new_set)谢谢,我尝试了这个表单,但由于某种原因它没有工作,它只是为范围内的i(len(new_set))打印了完全相同的数组:为范围内的j(len(new_set[i]):如果new_set[i][j]==1:new_set[i][j]=-5打印(新设置)很奇怪,鉴于OP想要替换多个值,我想最具python风格的方法应该是使用np.where多次…?而不是使用一堆条件和/或elifs?@NathanThomas对hick黑客很抱歉。我把它添加到了答案中。:)我很好奇,但结果非常优雅。很高兴看到完整的工作示例供将来使用@非常欢迎你!奇怪的是,考虑到OP想要替换多个值,我想最具python风格的方法应该是使用np.where多次。。。?“而不是使用一堆条件和/或elifs?”NathanThomas对hick黑客表示抱歉。我把它添加到了答案中。:)我只是好奇,但结果却很优雅。很高兴看到完整的工作示例供将来使用@非常欢迎你!