2012-08-02 21 views
0

这应该是很容易...仅连接现存的非空numpy数组?

我想连接的阵列A,B和C.这可能是一个或更多的人可能不存在或为空。我想要将其余数组连接起来。如果,例如,B是空的,我想连接A和C.

我读过这些问题似乎相关:

How can I check whether the numpy array is empty or not?

How do you 'remove' a numpy array from a list of numpy arrays?

我假设有一个1 -2行方式来做到这一点。

+1

你是什么意思时,你说“可能不存在”吗? – user545424 2012-08-02 16:56:09

+0

A,B和C是列表中的数组,我可能会采用超出范围的索引。但为了保持这一点更一般,任何情况下A,B和/或C可能都没有生成。 – 2012-08-02 17:01:47

回答

1

串联空数组是没有问题的:

In [1]: a = np.arange(10) 

In [2]: b = np.array([]) 

In [3]: c = np.arange(3) 

In [4]: np.concatenate((a,b,c)) 
Out[4]: array([ 0., 1., 2., 3., 4., 5., 6., 7., 8., 9., 0., 1., 2.]) 

对于二维数组:

In [1]: a = np.arange(12.0).reshape((4,3)) 

In [2]: b = np.arange(24.0).reshape((8,3)) 

In [3]: c = np.array([]) 

In [4]: np.concatenate([x for x in [a,b,c] if x.size > 0]) 
Out[4]: 
array([[ 0., 1., 2.], 
     [ 3., 4., 5.], 
     [ 6., 7., 8.], 
     [ 9., 10., 11.], 
     [ 0., 1., 2.], 
     [ 3., 4., 5.], 
     [ 6., 7., 8.], 
     [ 9., 10., 11.], 
     [ 12., 13., 14.], 
     [ 15., 16., 17.], 
     [ 18., 19., 20.], 
     [ 21., 22., 23.]]) 
+0

我知道,但这些不是一维数组,除非它们是空的。 – 2012-08-02 16:57:51

+0

@TristanKlassen:阵列是什么形状?如果他们不是1D,那么当你说“连接”时,你应该确切地指定你的意思。 – user545424 2012-08-02 17:00:39

+0

2D。沿轴保证它们的大小相同,除非它们是空的。 – 2012-08-02 17:03:45