Pep*_*per 2 python numpy numpy-ndarray
我有一个[10,10] numpy.ndarray. 我试图让索引成为每一行中第二大的数字。所以对于数组:
[101 0 1 0 0 0 1 1 2 0]
[ 0 116 1 0 0 0 0 0 1 0]
[ 1 4 84 2 2 0 2 4 6 1]
[ 0 2 0 84 0 6 0 2 3 0]
[ 0 0 1 0 78 0 0 2 0 11]
[ 2 0 0 1 1 77 5 0 2 0]
[ 1 2 1 0 1 2 94 0 1 0]
[ 0 1 1 0 0 0 0 96 0 4]
[ 1 5 4 3 1 3 0 1 72 4]
[ 0 1 0 0 3 2 0 7 0 82]
Run Code Online (Sandbox Code Playgroud)
预期结果: [8, 2, 8, 5, 9, ...]
有什么建议?
惊人的numpy.argsort()功能使这项任务变得非常简单。找到排序索引后,获取倒数第二列。
m = np.array([[101, 0, 1, 0, 0, 0, 1, 1, 2, 0],
[ 0, 116, 1, 0, 0, 0, 0, 0, 1, 0],
[ 1, 4, 84, 2, 2, 0, 2, 4, 6, 1],
[ 0, 2, 0, 84, 0, 6, 0, 2, 3, 0],
[ 0, 0, 1, 0, 78, 0, 0, 2, 0, 11],
[ 2, 0, 0, 1, 1, 77, 5, 0, 2, 0],
[ 1, 2, 1, 0, 1, 2, 94, 0, 1, 0],
[ 0, 1, 1, 0, 0, 0, 0, 96, 0, 4],
[ 1, 5, 4, 3, 1, 3, 0, 1, 72, 4],
[ 0, 1, 0, 0, 3, 2, 0, 7, 0, 82]])
# Get index for the second highest value.
m.argsort()[:,-2]
Run Code Online (Sandbox Code Playgroud)
array([8, 8, 8, 5, 9, 6, 5, 9, 1, 7], dtype=int32)
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
2426 次 |
| 最近记录: |