从Python中的列表中恢复数据

时间:2014-05-20 23:09:33

标签: python arrays list numpy

我在python中有两个列表,比如说A和B.

列表A 是包含一些整数索引的列表列表,例如[[2,3,1,3,2,3,3], [4,2,1,4],[5,4,3,3,3,4,]...],依此类推。

列表B 具有相同的结构,但不是整数有numpy数组。 [[array([0, 0]), array([0, 0]), array([0, 1]) ...][[array([0, 0]), array([0, 1])...]...]

这些列表是相关的,因此每个numpy数组对应一个整数,换句话说,A的子列表和B的子列表具有相同的大小。例如

[[2,3,3,3,2,4]...]

[[array([0, 0]), array([0, 1]), array([0, 1]), array([0, 1]), array([0, 0]), array([1, 0])]...]

A的子列表中的第一个整数,“2”链接到B的子列表中的第一个numpy数组。

正如你所看到的,有重复的整数,结果是重复的numpy数组。我希望在不重复的情况下恢复唯一索引,从而恢复它们相应的数组。

以上面的例子为例,程序的返回应该是这样的:

[[2,3,4]...]

[[array([0, 0]), array([0, 1]), array([1, 0])]...]

如何从列表A中恢复列表b中对应的numpy数组的唯一元素?

我的第一次尝试使用了numpy.unique功能,因此我可以有效地恢复列表A,但后来我丢失了从B中恢复信息的信息。该行是

A = np.array([np.unique(a) for a in A])

收回 我有以下

import numpy as np
A = [] # PUT A REAL (short) LIST HERE 
B = [] # PUT A REAL (short) LIST HERE
uniqueA = np.array([np.unique(a) for a in A])
print uniqueA #prints what I want/dont want
expectA = [1,4] # put what you would expect to get back
#ask additional questions here

1 个答案:

答案 0 :(得分:1)

首先,获取A的唯一索引,然后从AB

获取它们
import numpy as np

A = [[2,3,1,3,2,3,3], [4,2,1,4]]
B = [[np.zeros(2)]*len(A[0]), [np.zeros(2)]*len(A[1])]

indices = np.array([np.unique(a, True)[1] for a in A])

A = np.array([np.array(arr)[index] for arr, index in zip(A, indices)])
B = np.array([np.array(arr)[index] for arr, index in zip(B, indices)])