我在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
答案 0 :(得分:1)
首先,获取A
的唯一索引,然后从A
和B
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)])