假设我有一个 2D numpy
数组如:
[[1, 8, 3, 4, 5],
[10,13,13,12,15]]
我想将除每行中最大或最大 2 个元素之外的所有元素都转换为零。我想得到的输出是:
[[0, 8, 0,0, 5],
[0,13,13,0,15]]
我怎样才能做到这一点?
最佳答案
只有一行代码且没有循环 :
a = np.asarray([[1, 8, 3, 4, 5],
[10,13,13,12,15]])
n_max = 2 # second max element
a * (a >= np.sort(a, axis=1)[:,[-n_max]]).astype(int)
输出:array([[ 0, 8, 0, 0, 5],
[ 0, 13, 13, 0, 15]])
对列做同样的事情......a = np.asarray([[1, 8, 3, 4, 5],
[10,13,13,12,15],
[6, 9, 12,7, 7],
[3, 8, 5 ,22, 2]])
n_max = 2 # second max element
a * (a >= np.sort(a, axis=0)[[-n_max],:]).astype(int)
输出:array([[ 0, 0, 0, 0, 0],
[10, 13, 13, 12, 15],
[ 6, 9, 12, 0, 7],
[ 0, 0, 0, 22, 0]])
关于python - 使numpy 2d数组中每行中除最大n元素之外的所有元素为零,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56321906/