2017-09-08 28 views
2

我有一個包含許多元組的元組。我的主元組中的每個元組都有兩個元素 - 第一個元素是一個形狀爲(700,)的數組,第二個 元素是一個整數。串聯元組中的元組

這裏是我的元組的小圖示:

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

我期待所有的陣列組合成一個大矩陣,所有的整數到一個列向量,其全部放入到一個元組。

所以我的輸出應該是這樣的:用與形狀(3,3)的陣列的第一個元素

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

一個元組,並用的形狀的第二元件作爲一個數組 ( 3)

我假設我們可以使用numpy的堆棧方法之一,但我不能包裝我的頭 圍繞如何訪問元組的所有元素來這樣做。

謝謝。

+0

因此,輸出將是一個3×4規則形陣列,是嗎? – Divakar

+0

沒有輸出將是一個具有兩個數組的數組--3x3和3.希望這是有道理的。 – Moondra

+0

你能否寫下實際的預期輸出,因爲你所顯示的不是有效的輸出。 – Divakar

回答

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])] 
+0

地圖在這裏出色地工作+1。自從OP將他的例子從列表更改爲數組後,我將刪除我的答案。 –

+0

'map'的列表理解版本:'[np.array(i)for zip in(* x)]''。關鍵是'zip(* x)'實際上是一個列表'轉置'。 – hpaulj

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))