python - 根据行和列对矩阵中的所有元素进行排名
问题描述
假设我有一个矩阵(Python 中的二维列表),我想创建另一个矩阵,其中所有元素的排名基于它们所在的行和列。条件是:
- 排名应该从1开始
- 应为同一行或同一列中的相同元素提供相同的排名
- 如果相同的元素基于其特定的行或列排名位于不同的行或列中,则它们可能具有不同的排名
- 最大等级应尽可能小
假设给出的 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]]
推荐阅读
- javascript - jQuery切换对象时CSS转换工作
- azure - 使用 Azure Data Lake Analytics / U-SQL 拆分 1TB 文件
- python - 在用户加入事件上发送消息 - discord.py
- vectorization - 使用 GCC 的自动矢量化不起作用
- python - 在python中将多个值绘制到一个键
- r - 函数中列的“动态”命名
- python - 在张量流中得到一个 ValueError 说我的形状不兼容
- symfony - 选项卡式格式的 Symfony 4.4 配置 yaml
- gradle - 如何将嵌套集合添加到扩展
- python - 使用 qgis 和 shaply 错误:GEOSGeom_createLinearRing_r 返回一个 NULL 指针