2013-11-27 163 views
0

很可能有人已經問過這個,但是我找不到它。問題是如何將值分配給來自兩個一維數組的二維數組。例如:從兩個一維數組中分配值給二維數組

import numpy as np 
#a is the 2D array. b is the 1D array and should be assigned 
#to second coordinate. In this exaple the first coordinate is 1. 
a=np.zeros((3,2)) 
b=np.asarray([1,2,3]) 
c=np.ones(3) 
a=np.vstack((c,b)).T 

輸出:

[[ 1. 1.] 
[ 1. 2.] 
[ 1. 3.]] 

我知道我做這麼幼稚的方式,但我相信應該有這樣做的一個行的方式。

P.S.在我正在處理的實際情況中,這是一個數組的子數組,因此我無法將第一個座標從開頭設置爲1。整個陣列的第一個座標是不同的,但是在應用np.where後,它們變得不變。

回答

2

2行怎麼樣?

>>> c = np.ones((3, 2)) 
>>> c[:, 1] = [1, 2, 3] 

並證明它的工作原理:

>>> c 
array([[ 1., 1.], 
     [ 1., 2.], 
     [ 1., 3.]]) 

或者,也許你想np.column_stack

>>> np.column_stack(([1.,1,1],[1,2,3])) 
array([[ 1., 1.], 
     [ 1., 2.], 
     [ 1., 3.]]) 
+0

謝謝。投票,但重點是我的第一個數組是固定的,但不是所有的值。所以在實際情況下,我實際上使用'np.where',因此第一個值爲1,否則第一個向量的所有座標都不是'1'。有些也是'0'。但是,謝謝我會更新它。 – Cupitor

1

第一,但絕對沒有理由創建原始zeros數組你堅持在a,永遠不會引用,並取代補使用相同的名字來排列不同的數組。第二,如果要創建與b相同的形狀和dtype的數組,但使用全部1的數組,請使用ones_like

所以:

b = np.array([1,2,3]) 
c = np.ones_like(b) 
d = np.vstack((c, b).T 

你當然可以擴大b到3X1陣列,而不是3陣列,在這種情況下,你可以使用hstack,而不是需要到vstack然後轉...但我不我不覺得是再簡單不過:

b = np.array([1,2,3]) 
b = np.expand_dims(b, 1) 
c = np.ones_like(b) 
d = np.hstack((c, b))