python - 根据行和列对矩阵中的所有元素进行排名

标签 python matrix

假设我有一个矩阵(Python 中的二维列表),我想创建另一个矩阵,其中所有元素的排名基于它们所在的行和列。条件是:

  1. 排名应从 1 开始
  2. 应为同一行或同一列中的相同元素提供相同的排名
  3. 如果相同的元素根据其特定的行或列排名位于不同的行或列中,则它们可能具有不同的排名
  4. 最大排名应尽可能小

假设给出的 5X5 矩阵为:

18, 25, 7, 11, 11
33, 37, 14, 22, 25
29, 29, 11, 14, 11
25, 25, 14, 14, 11
29, 25, 14, 11, 7

预期输出是:

3, 4, 1, 2, 2
6, 7, 3, 4, 5
5, 5, 2, 3, 2
4, 4, 3, 3, 2
5, 4, 3, 2, 1

如何用 Python 或任何编程语言编写此代码,或者解决此问题背后的算法是什么?

最佳答案

尝试使用此嵌套列表理解:

print([[sorted(set(i)).index(x) + 1 for x in i] for i in l])

输出:

[[3, 4, 1, 2, 2], [4, 5, 1, 2, 3], [3, 3, 1, 2, 1], [3, 3, 2, 2, 1], [5, 4, 3, 2, 1]]

关于python - 根据行和列对矩阵中的所有元素进行排名,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57087917/

相关文章:

performance - Matlab bsxfun() - 如何解释沿不同维度扩展时的性能差异?

python - 交织 3 个 numpy 矩阵?

python - 如何在pandas中获取所选行与另一列值的平均值

用于函数子段的 Python 装饰器

python - 使用 ImageDataGenerator 时 Keras 卡住

c++ - 如何组成一个矩阵来执行世界坐标的等轴测(二轴测)投影?

python - 下载没有 Python unicode 错误的 html

Python - pandas ==> WINDOW 聚合

algorithm - 如何最佳地将元素放置在矩阵中,以便与其他元素的距离最小?

matlab - 如何将矩阵分成相等的部分?