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。
谢谢
这可以通过简单的一行中的列表理解来完成。
假设您有一个列表列表:
a = [[1, 2, 3], [1, 2, 3], [1, 2, 3]]
Run Code Online (Sandbox Code Playgroud)
并且您想将所有出现的 替换2为4:
[[_el if _el != 2 else 4 for _el in _ar] for _ar in a]
Run Code Online (Sandbox Code Playgroud)
另一种选择是使用numpy 的wherefunction。从文档字符串:
其中(条件,[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)
Run Code Online (Sandbox Code Playgroud)
如果您想一次性替换多个值,您可以执行以下操作:假设您想替换1为3和: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)
我们对函数进行向量化。
希望有所帮助,编码愉快!
| 归档时间: |
|
| 查看次数: |
11055 次 |
| 最近记录: |