m行n列矩阵amn
其中每一行的数都大于0 并且每行的值相加等于1。
现在想利用python 把这个a_mn 矩阵转化为 r_mn 矩阵。
r_mn 矩阵是 a_mn 在第n行的排序(包括正序,倒序)
例如a_21 = [[0.6,0.3,0.1], [0.35,0.35,0.3]]
r_21 = [[3,2,1], [2,2,1]] (正序)
r_21 = [[1,2,3], [1,1,1]] (倒序)
这样的矩阵转换代码 在python 中如何实现 (任意m,n都需要通用)。
def change(data, sortType):
test = []
for item in data:
result = []
for value in item:
l = list(set(item))
l.sort(reverse=sortType)
for index1, value1 in enumerate(l, 1):
if value1 == value:
result.append(index1)
test.append(result)
return test
data = [[0.6, 0.3, 0.1], [0.35, 0.35, 0.3]]
print(change(data, True))
print(change(data, False))
先记录下标再排序,然后再依次判断与上个元素的大小关系
import numpy as np
a = [[0.6,0.3,0.1], [0.35,0.35,0.3]]
def func(x,flag):
L=list(set(x))
L.sort(key=lambda p:x.index(p))
after=list(np.argsort(L))
d={}
for k,v in zip(L,after):
d[k]=v
newList=[]
for i in x:
newList.append(d[i]+1)
return list(reversed(newList)) if flag else newList
print(list(map(func,a,[False]*len(a))))
print(list(map(func,a,[True]*len(a))))
看到了大家给你的回复结果,其实更多的你是要去理解其中的方式方法:
python实现矩阵转置的几种方法
(1)方法一、使用numpy转置
(2)方法二、使用zip()函数
(3)方法三、使用python列表表达式【不占用额外空间,“原地修改”】
(4)方法四、新建列表B,使用双重循环添加元素
这样就可以看出一个使用了numpy转置、一个使用了新建列表B,使用双重循环添加元素。知其然而知其所以然,加油!
提供一个参考学习链接,非常不错,期望对你学习有所帮助:https://blog.csdn.net/qq_34243930/article/details/108524383