2016-06-28 87 views
0

我有一個2D矩陣。對於這個例子的目的,讓我們說這是一個隨機矩陣平坦numpy陣列沒有雙循環

>>> a = np.random.randn(5, 7) 
>>> a 
array([[-0.37279322, 0.28619523, -0.05309901, 0.26010327, 0.1846693 , 0.33112176, 0.75814911], 
     [ 1.57001151, -0.86831693, -0.20576395, 1.46450855, -0.01631132, 3.02790403, -0.65313017], 
     [ 0.2362675 , -1.52190536, 0.04687194, 2.01618876, 0.03780218, -0.53041096, -0.30104844], 
     [-0.5504834 , 1.04286156, 1.12863785, 0.89583492, 0.28607363, 1.42858007, 0.28582572], 
     [-0.768464 , 0.31952554, 0.81129581, 0.26239668, -0.23242878, -1.01584339, 0.39573906]]) 

和標籤的兩個向量:

label_y = np.array([23, 984, 123, 9321, 121238]) 
label_x = np.array([121, 31312, 9123131, 1111, 1231441, 1929313, 192312312361]) 

我想變平的輸出他們的標籤的indeces的元素和值。例如:

23,121,-0.37279322 
23,31312,0.28619523 
23,9123131,-0.05309901 
23,1111,0.26010327 
23,1231441,0.1846693 
23,1929313,0.33112176 
23,192312312361,0.75814911 
984,121,... 
... 

有沒有一種簡單的方法在numpy中做到沒有for循環?

回答

2

使用np.meshgrid創建對應於X2D網格和Y標籤,然後將它們堆疊爲非常久遠的2D輸入數組a列,像這樣 -

X,Y = np.meshgrid(label_x,label_y) 
out = np.column_stack((Y.ravel(),X.ravel(),a.ravel()))