我最初有一个未排序的np数组,其中包含多个数组
test = np.array([['A', 'A', 'B', 'E', 'A'],
['B', 'E', 'A', 'E', 'B'],
['C', 'D', 'D', 'A', 'C'],
['B', 'D', 'A', 'C', 'A'],
['B', 'A', 'E', 'A', 'E'],
['C', 'D', 'C', 'E', 'D']])
根据第一列来对数组进行排序:
argsortTest = test[:,0].argsort()
test_sorted = test[argsortTest]
test_sorted:
[['A' 'A' 'B' 'E' 'A']
['B' 'E' 'A' 'E' 'B']
['B' 'D' 'A' 'C' 'A']
['B' 'A' 'E' 'A' 'E']
['C' 'D' 'D' 'A' 'C']
['C' 'D' 'C' 'E' 'D']]
我对test_sorted
数组进行了一些处理,改变了一些值(第一列保持不变,行数也不变)。最后,我想要检索出原始的二维数组并保留更改后的值。因此,我需要再次根据第一列对其进行“取消排序”。
我目前的解决方案:
argsortTestList = argsortTest.tolist()
rangeX = np.array(xrange(6))
unsort_args = [argsortTestList.index(x) for x in rangeX]
unsorted = test_sorted[unsort_args]
我之所以先进行排序,然后在最后再取消排序,是因为在处理已排序的数组时,性能更好。但是由于所做的更改没有反映到原始数组中,因此我不得不再次取消排序。
然而,“取消排序”的解决方案太慢了(大型数据集:约20万行)