在python中将一组元组转换为列表的numpy数组

在python中将一组元组转换为列表的numpy数组,python,numpy,matrix,set,symmetric-difference,Python,Numpy,Matrix,Set,Symmetric Difference,因此,我一直在用集合方法“对称_差”在2个ndarray矩阵之间,方法如下: x_set = list(set(tuple(i) for i in x_spam_matrix.tolist()).symmetric_difference( set(tuple(j) for j in partitioned_x[i].tolist()))) x = np.array([list(i) for i in x_set]) 这种方法对我来说很好,但感觉有点笨拙……有

因此,我一直在用集合方法“对称_差”在2个ndarray矩阵之间,方法如下:

x_set = list(set(tuple(i) for i in x_spam_matrix.tolist()).symmetric_difference(
                 set(tuple(j) for j in partitioned_x[i].tolist())))

x = np.array([list(i) for i in x_set])
这种方法对我来说很好,但感觉有点笨拙……有没有更优雅一点的方法呢?

:

你的代码没有问题。 不过,如果我必须对其进行代码审查,我会提出以下建议

spam_matrix_set = set(tuple(item) for item in x_spam_matrix.tolist())
partitioned_set = set(tuple(item) for item in partitioned_x[index].tolist())
disjunctive_union = spam_matrix_set.symmetric_difference(partitioned_set)

x = np.array([list(item) for item in disjunctive_union])

元组的简单列表:

In [146]: alist = [(1,2),(3,4),(2,1),(3,4)]
把它放在一套里:

In [147]: aset = set(alist)
In [148]: aset
Out[148]: {(1, 2), (2, 1), (3, 4)}
np.array
仅将该集合包装在对象数据类型中:

In [149]: np.array(aset)
Out[149]: array({(1, 2), (3, 4), (2, 1)}, dtype=object)
In [152]: np.array([(1,2),(3,4),(5,6,7)])
Out[152]: array([(1, 2), (3, 4), (5, 6, 7)], dtype=object)
In [153]: _.shape
Out[153]: (3,)
但将其放入列表中,并获得二维数组:

In [150]: np.array(list(aset))
Out[150]: 
array([[1, 2],
       [3, 4],
       [2, 1]])
由于它是一个元组列表,因此也可以将其制成结构化数组:

In [151]: np.array(list(aset),'i,f')
Out[151]: array([(1, 2.), (3, 4.), (2, 1.)], dtype=[('f0', '<i4'), ('f1', '<f4')])

你们两个都有一个外部的
i
和另一个
i
吗?此外,如果分割x_集合线,可能看起来不那么笨拙。是的,此块位于for循环下(这是交叉验证过程的一部分),因此“partitioned_x[i]”中的i不相关。我所说的“更优雅”是指不那么复杂……也许是一个内置函数,可以将一组元组转换为列表列表或类似的东西。谢谢你!明确强调了禅宗的明确性和可读性!正式注明,谢谢:)。很漂亮!!!非常感谢。我忽略了一个事实,“np.array(list(aset))”将给出与“np.array([list(I)for I in x_set])”相同的结果。这正是我要找的。
In [152]: np.array([(1,2),(3,4),(5,6,7)])
Out[152]: array([(1, 2), (3, 4), (5, 6, 7)], dtype=object)
In [153]: _.shape
Out[153]: (3,)