带有元组的2-D numpy数组:扩展为具有原始元组组合的多个数组

时间:2014-03-28 18:43:18

标签: python numpy

假设我有一个如下的NumPy数组:

0      1      (2,3)
(4,5)  6      7
9      (10,)  11

我怎么能把它拆分成下面的数组列表?条件:最终数组中没有元组,每个数组都包含元组元素的唯一组合。也就是说,原始数组中有两个元组,因此这些元素有4种不同的组合。下面的第一个数组包含原始组合(2)和(4)。

0  1  2
4  6  7
9  10 11

0  1  2
5  6  7
9  10 11

0  1  3
4  6  7
9  10 11

0  1  3
5  6  7
9  10 11

1 个答案:

答案 0 :(得分:1)

正如@unutbu建议的那样,这样的数据结构很尴尬。但是如果你想这样做,它是可行的:

In [52]:
A
Out[52]:
array([[0, 1, (2, 3)],
       [(4, 5), 6, 7],
       [9, (10,), 11]], dtype=object)

In [53]:
import itertools
AR=A.ravel()
AT=[i for i, val in enumerate(AAR) if isinstance(val, tuple)]
for item in itertools.product(*AR[AT]):
    B=AR.copy()
    B[AT]=item
    print B.reshape(A.shape)
[[0 1 2]
 [4 6 7]
 [9 10 11]]

[[0 1 2]
 [5 6 7]
 [9 10 11]]

[[0 1 3]
 [4 6 7]
 [9 10 11]]

[[0 1 3]
 [5 6 7]
 [9 10 11]]