我有一个矩阵,它应该在对角线上有一个矩阵,但列是混合起来的。根据其对角线排列一个numpy矩阵
但我不知道怎么回事,没有明显的循环,有效地互换行以获得在对角线上的统一。我甚至不知道我会通过什么样的关键排序。
有什么建议吗?
我有一个矩阵,它应该在对角线上有一个矩阵,但列是混合起来的。根据其对角线排列一个numpy矩阵
但我不知道怎么回事,没有明显的循环,有效地互换行以获得在对角线上的统一。我甚至不知道我会通过什么样的关键排序。
有什么建议吗?
您可以使用numpy的的argmax
确定了球门立柱订购和使用argmax结果列索引重新排列矩阵:
>>> z = numpy.array([[ 0.1 , 0.1 , 1. ],
... [ 1. , 0.1 , 0.09],
... [ 0.1 , 1. , 0.2 ]])
numpy.argmax(z, axis=1)
>>> array([2, 0, 1]) #Goal column indices
z[:,numpy.argmax(z, axis=1)]
>>> array([[ 1. , 0.1 , 0.1 ],
... [ 0.09, 1. , 0.1 ],
... [ 0.2 , 0.1 , 1. ]])
非常好。对于1000x1000阵列,您的运行时间为0.1s,我的运行时间为10s。 – Snowball
>>> import numpy as np
>>> a = np.array([[ 1. , 0.5, 0.5, 0. ],
... [ 0.5, 0.5, 1. , 0. ],
... [ 0. , 1. , 0. , 0.5],
... [ 0. , 0.5, 0.5, 1. ]])
>>> np.array(sorted(a, cmp=lambda x, y: list(x).index(1) - list(y).index(1)))
array([[ 1. , 0.5, 0.5, 0. ],
[ 0. , 1. , 0. , 0.5],
[ 0.5, 0.5, 1. , 0. ],
[ 0. , 0.5, 0.5, 1. ]])
它实际上按行排序,而不是列(但结果是相同的)。它的工作原理是由列的1
是指数排序
因为他们'重新漂浮,你能保证他们的列正好是1.0和唯一的吗? – wim
@wim:存在浮点错误的问题。但是,沿着对角线的每个条目都保证在该行中具有最高值。 – mac389