在元组中连接数组的元组

时间:2017-09-08 04:02:59

标签: python-3.x numpy tuples

我有一个包含许多元组的元组。我的主元组中的每个元组都有两个元素 - 第一个元素是一个形状为(700,)和第二个元素的数组 element是一个整数。

这是我的元组的一个小代表:

x =( (np.array[3,3,3],1), (np.array[4,4,4],2), (np.array[5,5,5],3))

我希望将所有数组合并成一个大矩阵,并将所有整数组合成一个列向量,这些都适合一个元组。

所以我的输出应该是这样的:

y= (np.array([[3,3,3],[4,4,4], [5,5,5]]),   np.array([1,2,3]))

一个元组,第一个元素为数组,形状为(3,3),第二个元素为数组      形状为(3,)

我假设我们可以使用numpy的堆栈方法之一,但我不能包裹我的脑袋 围绕如何访问元组的所有元素来执行此操作。

谢谢。

2 个答案:

答案 0 :(得分:3)

>>> x = ((np.array([3,3,3]),1), (np.array([4,4,4]),2), (np.array([5,5,5]),3))
>>> y = (np.array([e for e, _ in x]), np.array([i for _, i in x]))
(array([[3, 3, 3],
        [4, 4, 4],
        [5, 5, 5]]), array([1, 2, 3]))

或者,没有理解:

>>> map(np.array, zip(*x))
[array([[3, 3, 3],
        [4, 4, 4],
        [5, 5, 5]]), array([1, 2, 3])]

答案 1 :(得分:1)

结构化阵列方法:

首先使用更正语法的元组:

In [392]: x =( (np.array([3,3,3]),1), (np.array([4,4,4]),2), (np.array([5,5,5]),3))

结构化数组的输入是一个元组列表,每个元组包含record的数据:

In [393]: arr=np.array(list(x), np.dtype('3i,i'))
In [394]: arr
Out[394]: 
array([([3, 3, 3], 1), ([4, 4, 4], 2), ([5, 5, 5], 3)],
      dtype=[('f0', '<i4', (3,)), ('f1', '<i4')])

按字段名称访问数组:

In [395]: arr['f0']
Out[395]: 
array([[3, 3, 3],
       [4, 4, 4],
       [5, 5, 5]], dtype=int32)
In [396]: arr['f1']
Out[396]: array([1, 2, 3], dtype=int32)

或作为字段元组:

In [397]: (arr['f0'], arr['f1'])
Out[397]: 
(array([[3, 3, 3],
        [4, 4, 4],
        [5, 5, 5]], dtype=int32), array([1, 2, 3], dtype=int32))