2024-04-25 09:16:16 发布
网友
假设我有一个2D numpy数组,比如:
numpy
[[1, 8, 3, 4, 5], [10,13,13,12,15]]
我想把所有的元素都转换成零,除了每行最多2个元素。我想得到的结果是:
[[0, 8, 0,0, 5], [0,13,13,0,15]]
我该怎么做?你知道吗
def func(x): x[np.argwhere(x != x.max())] = 0 return x arr = np.array([[1, 8, 3, 4, 5], [10,13,13,12,15]]) new_arr = np.apply_along_axis(func, 1, arr)
您可以修改最大2个数字的函数“func”。上面的代码段将所有元素替换为0,但每行中最大的元素除外。你知道吗
更新:要使用最大的n个元素,可以使用apply中的以下函数
n = 2 def func(x): global n idx = (-x).argsort()[n:] x[idx] = 0 return x arr = np.array([[1, 8, 3, 4, 5], [10,13,13,12,15]]) new_arr = np.apply_along_axis(func, 1, arr)
为了解决这个问题,我们需要对您的数据进行排序。如果x是numpy数组数据,首先我们对它进行排序。你知道吗
import numpy as np x = np.array([[1,8,3,4,5],[10,13,13,12,15]]) x.sort()
排序后,每行只有最后两个元素显示最大值。所以,另一个元素的值为零,我们将x保存在f。你知道吗
x
f
for i in range(0,len(x)): x[i][0:-2]=0 f = x
那么,f就是:
array([[ 0, 0, 0, 5, 8], [ 0, 0, 0, 13, 15]])
现在我们需要初始的x和f:
x = np.array([[1,8,3,4,5],[10,13,13,12,15]])
x是:
array([[ 0, 8, 0, 0, 5], [ 0, 13, 13, 0, 15]])
最后,我们比较x和f以达到我们的目标:
for i in range(0,len(f)): for j in range(0,len(f[i])): if x[i][j] not in f[i]: x[i][j]=0
RESULT对于x将是这样的:
RESULT
此代码仅用于标识行中的最大值,并将所有其他值替换为零。 如果你想写最高值的循环,我就写最高值的循环。你知道吗
import numpy as np import copy a = np.array([[1, 8, 3, 4, 5], [10,13,13,12,15]]) b = copy.deepcopy(a)
a==np最大值(a) 将在未来引发一个错误,所以这里有一个调整版本,将继续正确广播。你知道吗
# get max by row and convert from (n, ) -> (n, 1) which will broadcast row_maxes = a.max(axis=1).reshape(-1, 1)
如果需要进行更新,您可以这样做
a[:] = np.where(a == row_maxes, row_maxes, 0) >> a array([[ 0, 8, 0, 0, 0], [ 0, 0, 0, 0, 15]])
您可以从每行中标识max 2并应用循环以获得所需的结果。你知道吗
b = np.sort(b) max_two = np.array(list(map(lambda row : row[-2:], b))) for i, row in enumerate(a): for j, elm in enumerate(row): if elm not in max_two: a[i][j] = 0 >> a array([[ 0, 8, 0, 0, 5], [ 0, 13, 13, 0, 15]])
您可以修改最大2个数字的函数“func”。上面的代码段将所有元素替换为0,但每行中最大的元素除外。你知道吗
更新:要使用最大的n个元素,可以使用apply中的以下函数
为了解决这个问题,我们需要对您的数据进行排序。如果x是numpy数组数据,首先我们对它进行排序。你知道吗
排序后,每行只有最后两个元素显示最大值。所以,另一个元素的值为零,我们将
x
保存在f
。你知道吗那么,
f
就是:现在我们需要初始的
x
和f
:x
是:最后,我们比较
x
和f
以达到我们的目标:RESULT
对于x
将是这样的:此代码仅用于标识行中的最大值,并将所有其他值替换为零。 如果你想写最高值的循环,我就写最高值的循环。你知道吗
a==np最大值(a) 将在未来引发一个错误,所以这里有一个调整版本,将继续正确广播。你知道吗
如果需要进行更新,您可以这样做
您可以从每行中标识max 2并应用循环以获得所需的结果。你知道吗
相关问题 更多 >
编程相关推荐