[英]Reordering a list based on another list in Python
我有两个包含 numpy arrays 的列表Ii0
和Iv0
。 我正在使用argsort()
重新排序Ii0
中的元素以生成新列表Ii01
。 我想使用相同的顺序对Iv0
中的元素重新排序以生成新列表Iv01
。 我介绍了当前和预期的 output。
import numpy as np
Ii0 = [np.array([[0, 1],[0, 2],[1, 3],[2, 4],[4,3]]),
np.array([[0, 1],[0, 2],[1, 3],[2, 5],[4,3],[3,4]])]
Iv0 = [np.array([[10],[20],[30],[40],[50]]),
np.array([[25],[38],[41],[97],[65],[54]])]
Ii01 = [i[i[:,1].argsort()] for i in Ii0]
Iv01 = [i[i[:,0].argsort()] for i in Iv0]
print("Iv01 =",Iv01)
当前的 output 是
Iv01 = [array([[10],
[20],
[30],
[40],
[50]]), array([[25],
[38],
[41],
[54],
[65],
[97]])]
预期的 output 是
Iv01 = [array([[10],
[20],
[30],
[50],
[40]]),array([[25],
[38],
[41],
[65],
[54],
[97]])]
利用:
Iv01 = [y[x[:,1].argsort()] for x, y in zip(Ii0, Iv0)]
print("Iv01 =",Iv01)
Output
Iv01 = [array([[10],
[20],
[30],
[50],
[40]]), array([[25],
[38],
[41],
[65],
[54],
[97]])]
或者作为替代方案,使用np.take_along_axis
:
Iv01 = [np.take_along_axis(y, x[:, 1].argsort().reshape((-1, 1)), 0) for x, y in zip(Ii0, Iv0)]
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.