【发布时间】:2018-07-26 19:30:10
【问题描述】:
我有一个二维数组,它有大量的行(大于 5000)。
为了简单起见,假设 A 是我的矩阵的简单版本
A=([[1,2,2,3,3,3],
[[2,1,1,7,7,7],
[[4,4,1,1,1,1]])
现在,A 只有 3 行:
第一行有 3 个值:一个 1,两个 2,三个 3。
第 2 行有 3 个值,一个 2,两个 1,三个 7。
最后一行有2个值,两个4,四个1。
现在我可以很容易地找到每一行的多数值:
第一行是 3,第二行是 7,第三行是 1。(意味着我的代码已经找到了每一行的多数值并将它们存储为 [3,7,1])
每行的第二和第三多数值也很容易找到,对于第二多数值,第一行是 2,第二行是 1,第三是 4。(意味着我的代码已经找到每一行的第二多数值并存储它们为 [2,1,4] )。
对于第三、第四、第五……多数值,还是很容易找到的。
我想要做的是将每一行的第一多数值设置为 0,第二多数值设置为 -1,第三多数(如果存在)值设置为 -2 ....,如何做到这一点?
表示集合:
A=([[-2,-1,-1,0,0,0],
[[-2,-1,-1,0,0,0],
[[-1,-1,0,0,0,0]])
A 只是一个简单的实例。我的矩阵有大量的行。
那么,如何更轻松、更高效地做这件事呢?
我不想写一个 for 循环来设置每一行的值。
(意味着我可以做 A[0,A[0,:]==3]=0, A[1,A[1,:]==7]=0, A[2,A[2, :]==1]=0,但这太复杂了)
我想要的是这样的表格:
A[:,A[:,:]==[3,7,1]]=0
A[:,A[:,:]==[2,1,4]]=-1
A[:,A[:,:]==[1,2]]=-2
但是numpy没有这个能力。
谁能给我一个有效的方法?非常感谢!!!
【问题讨论】:
-
抱歉,我想我对您的
majority和biggest术语感到困惑。这是两个不同的东西。认为您可以删除此问题并将此问题的详细信息添加到您的旧问题中,然后我们尝试解决该问题。 -
对不起,这是一个语法错误,我修改了我的问题
-
没有最大的,只有多数。第二多数,第三多数。
-
@Divakar 你好,我修改了我的问题的详细内容,你现在明白了吗?
-
是的,让我们将这个问题保留为通用问题。