gpt4 book ai didi

python - 按单元格值枚举python矩阵

转载 作者:太空宇宙 更新时间:2023-11-04 04:55:20 25 4
gpt4 key购买 nike

给定一个矩阵:

m = np.matrix('1 2; 3 4')

我想按矩阵中值的降序枚举它的单元格(不是行\列)。所以在我的示例中,我想枚举:4、3、2、1 并为每个都有索引。

我可以将矩阵展平为一维数组,对数组排序并使用其索引恢复到原始矩阵索引。但是感觉不对。

python 是否有一些内置的功能?

最佳答案

你可以使用 np.ndenumerate获取索引和值的迭代器。

您可以将其转换为列表:

>>> import numpy as np
>>> m = np.matrix('1 2; 3 4')
>>> list(np.ndenumerate(m))
[((0, 0), 1), ((0, 1), 2), ((1, 0), 3), ((1, 1), 4)]

按值排序:

>>> sorted([(v, i) for (i,v) in np.ndenumerate(m)], reverse=True)
[(4, (1, 1)), (3, (1, 0)), (2, (0, 1)), (1, (0, 0))]

并提取索引:

>>> [i for (_, i) in sorted([(v, i) for (i,v) in np.ndenumerate(m)], reverse=True)]
[(1, 1), (1, 0), (0, 1), (0, 0)]

我不知道是否可以用更少的步骤完成。这是另一个矩阵的示例:

>>> m = np.matrix('1 4; 3 2')
>>> [i for (_, i) in sorted([(v, i) for (i,v) in np.ndenumerate(m)], reverse=True)]
[(0, 1), (1, 0), (1, 1), (0, 0)]

混合使用 numpy 和 vanilla 列表理解可能看起来很困惑。问题是 ndenumerate 返回一个迭代器。你可以使用:

np.fromiter(np.ndenumerate(m), np.dtype('2i, 1i'))

但它是元组的一维数组,不会使索引或排序变得更容易。

关于python - 按单元格值枚举python矩阵,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47196406/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com