我有一个包含许多元组的元组。我的主元组中的每个元组都有两个元素 - 第一个元素是一个形状为(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的堆栈方法之一,但我不能包裹我的脑袋 围绕如何访问元组的所有元素来执行此操作。
谢谢。
答案 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))