如何使用最小数量的交换来获得3个numpy数组之间的相同顺序?
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何使用最小数量的交换来获得3个numpy数组之间的相同顺序?相关的知识,希望对你有一定的参考价值。
免责声明
此问题(尽管相关)不是'how to swap rows in numpy array?'的重复项,而是如何根据最小交换次数来概括三个阵列之间的交换? (问题已在本文底部重述)。
Context
[访问CSSE COVID-19 Dataset时,我注意到三个可用的数据集(confirmed
,dead
和recovered
)每天都在相同的日期和相同的位置进行。但是,recovered
文件中的行与confirmed
和dead
文件中提供的行的顺序不同。下图中的索引参考与前几天有所不同(因为数据集每天更新)。
考虑confirmed
个案例的子集。
并且为了比较,考虑recovered
个案例的子集。
注意,confirmed
和recovered
情况下的行号和国家/省确实匹配-特别是在412
,413
和414
行。 (dead
案例的顺序未显示,因为它与confirmed
案例的顺序匹配。)
这些事件的数量一直在减少-在此过程中,需要交换的行号也是如此。我想自动执行此行交换,以便可以同时遍历所有三个数据集(而不是分别遍历每个数据集)。这样,对于我来说,将每个时间序列按位置分组到字典中就比较容易了。
示例(MWE)
例如,假设我有以下格式的数据。请注意,c
和d
的顺序相同,但是r
的顺序应从0-1-3-4-2
到0-1-2-3-4
。因此,要交换的行索引为2, 3, 4
。
# confirmed
c = np.array([
['name', 'province', 'property', 'value t1', 'value t2', 'value t3'],
['USA', 'a', 0.5, 1, 2, 3],
['MEXICO', 'b', 0.2, 5, 10, 100],
['CHINA', 'c', 0.7, 3, 6, 9],
['RUSSIA', 'd', 0.4, 2, 3, 5]], dtype=str)
# dead
d = np.array([
['name', 'province', 'property', 'value t1', 'value t2', 'value t3'],
['USA', 'a', 0.5, 0, 1, 1],
['MEXICO', 'b', 0.2, 1, 5, 25],
['CHINA', 'c', 0.7, 0, 2, 4],
['RUSSIA', 'd', 0.4, 0, 0, 1]], dtype=str)
# recovered
r = np.array([
['name', 'province', 'property', 'value t1', 'value t2', 'value t3'],
['USA', 'a', 0.5, 0, 0, 1],
['CHINA', 'c', 0.7, 0, 0, 3],
['RUSSIA', 'd', 0.4, 0, 0, 2],
['MEXICO', 'b', 0.2, 0, 0, 0]], dtype=str)
我可以从这些数据集中确定要交换的行。
condition_cd = ((c[:, 0] != d[:, 0]) | (c[:, 1] != d[:, 1]))
condition_dr = ((d[:, 0] != r[:, 0]) | (d[:, 1] != r[:, 1]))
condition_rc = ((r[:, 0] != c[:, 0]) | (r[:, 1] != c[:, 1]))
print(condition_cd, np.any(condition_cd)) # [False False False False False] False
print(condition_dr, np.any(condition_dr)) # [False False True True True] True
print(condition_rc, np.any(condition_rc)) # [False False True True True] True
# True corresponds to indices 2, 3, 4
问题
但是,如果明天更新的数据的行号发生更改,以致上述条件不再相同,该怎么办?由于0
和c
之间的差异(d
)最少,因此我想根据r
重新排序d
。如果这个差异数为> 0
,那么我将[[first重新排列d
,然后根据r
重新排列d
。最好的方法是什么?
以上是关于如何使用最小数量的交换来获得3个numpy数组之间的相同顺序?的主要内容,如果未能解决你的问题,请参考以下文章