Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/12.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
Arrays N ndarray每行中的最大值_Arrays_Algorithm_Python 2.7_Numpy - Fatal编程技术网

Arrays N ndarray每行中的最大值

Arrays N ndarray每行中的最大值,arrays,algorithm,python-2.7,numpy,Arrays,Algorithm,Python 2.7,Numpy,我有一个数据列,其中每一行都是一个单独的柱状图。对于每一行,我希望找到前N个值 我知道全局前N个值()的解决方案,但我不知道如何获得每行的前N个值 我可以迭代每一行并应用1D解决方案,但我不应该使用numpy广播来实现这一点吗?您可以使用axis=1的行,就像这样- import numpy as np # Find sorted indices for each row sorted_row_idx = np.argsort(A, axis=1)[:,A.shape[1]-N::] # S

我有一个数据列,其中每一行都是一个单独的柱状图。对于每一行,我希望找到前N个值

我知道全局前N个值()的解决方案,但我不知道如何获得每行的前N个值

我可以迭代每一行并应用1D解决方案,但我不应该使用numpy广播来实现这一点吗?

您可以使用axis=1的行,就像这样-

import numpy as np

# Find sorted indices for each row
sorted_row_idx = np.argsort(A, axis=1)[:,A.shape[1]-N::]

# Setup column indexing array
col_idx = np.arange(A.shape[0])[:,None]

# Use the column-row indices to get specific elements from input array. 
# Please note that since the column indexing array isn't of the same shape 
# as the sorted row indices, it will be broadcasted
out = A[col_idx,sorted_row_idx]
样本运行-

In [417]: A
Out[417]: 
array([[0, 3, 3, 2, 5],
       [4, 2, 6, 3, 1],
       [2, 1, 1, 8, 8],
       [6, 6, 3, 2, 6]])

In [418]: N
Out[418]: 3

In [419]: sorted_row_idx = np.argsort(A, axis=1)[:,A.shape[1]-N::]

In [420]: sorted_row_idx
Out[420]: 
array([[1, 2, 4],
       [3, 0, 2],
       [0, 3, 4],
       [0, 1, 4]], dtype=int64)

In [421]: col_idx = np.arange(A.shape[0])[:,None]

In [422]: col_idx
Out[422]: 
array([[0],
       [1],
       [2],
       [3]])

In [423]: out = A[col_idx,sorted_row_idx]

In [424]: out
Out[424]: 
array([[3, 3, 5],
       [3, 4, 6],
       [2, 8, 8],
       [6, 6, 6]])
如果希望元素按降序排列,可以使用此附加步骤-

In [425]: out[:,::-1]
Out[425]: 
array([[5, 3, 3],
       [6, 4, 3],
       [8, 8, 2],
       [6, 6, 6]])

您可以使用
np.partition
,方法与链接的问题相同:排序已沿最后一个轴进行:

In [2]: a = np.array([[ 5,  4,  3,  2,  1],
               [10,  9,  8,  7,  6]])
In [3]: b = np.partition(a, -3)    # top 3 values from each row
In [4]: b[:,-3:]
Out[4]: 
array([[ 3,  4,  5],
       [ 8,  9, 10]])

你能解释一下A中的索引是如何获取顶级值的吗?我喜欢这个答案,因为我还可以获取前N行的索引。