2015-05-20 129 views
1

一個相當簡單的問題,但我似乎沒有找到任何解決方案:用numpy數組填充數組?

我想在數組中使用兩個數組的差異,並將其作爲新的結果插入到一個新的數組中......我希望代碼澄清這個意圖,儘管它不工作,因爲python告訴我它不能將序列與數組計算結合起來......我該如何解決這個問題?提前致謝!

MeteorNum = 5 
#Coordinate Setup: 

XPos = np.random.randint(0, 600, (MeteorNum,1)) 
YPos = np.random.randint(0, 800, (MeteorNum,1)) 

XYPos = np.hstack((XPos,YPos)) 
XYPos = np.vstack((XYPos, XYPos[0])) 
print XYPos 

#Distances: 
r = np.zeros((MeteorNum,MeteorNum)) 

for i in range(0, MeteorNum): 
    for x in range(0, MeteorNum): 
     r[x,i] = (XYPos[x,:] - XYPos[i,:]) 
r = r*10**5 
print r 

,並在這裏的錯誤,我得到:

runfile('C:/Users/Marco DS/Dropbox/1_TUDelft/4Q/AE1205 Python/python codes  2015/bonus assigments/week_5 Gravity simu.py', wdir='C:/Users/Marco DS/Dropbox/1_TUDelft/4Q/AE1205 Python/python codes 2015/bonus assigments') 
[[249 660] 
[256 605] 
[119 423] 
[422 398] 
[480 504] 
[249 660]] 
Traceback (most recent call last): 

    File "<ipython-input-57-4cd9cc29ece0>", line 1, in <module> 
    runfile('C:/Users/Marco DS/Dropbox/1_TUDelft/4Q/AE1205 Python/python  codes 2015/bonus assigments/week_5 Gravity simu.py', wdir='C:/Users/Marco  DS/Dropbox/1_TUDelft/4Q/AE1205 Python/python codes 2015/bonus assigments') 

    File "C:\Users\Marco DS\Anaconda\lib\site-packages\spyderlib\widgets\externalshell\sitecustomize.py", line 682, in runfile 
execfile(filename, namespace) 

File "C:\Users\Marco DS\Anaconda\lib\site- packages\spyderlib\widgets\externalshell\sitecustomize.py", line 71, in execfile 
exec(compile(scripttext, filename, 'exec'), glob, loc) 

    File "C:/Users/Marco DS/Dropbox/1_TUDelft/4Q/AE1205 Python/python codes 2015/bonus assigments/week_5 Gravity simu.py", line 37, in <module> 
r[x,i] = (XYPos[x,:] - XYPos[i,:]) 

ValueError: setting an array element with a sequence. 
+0

請顯示所有錯誤... – plonser

+0

更好嗎? – user3604362

+1

請顯示完整的錯誤信息(回溯),它應該有一個行號,它被卡住的行,函數名稱,模塊名稱,... –

回答

1

嘗試在容器陣列中添加dtype=

MeteorNum = 5 
#Coordinate Setup: 

XPos = nprand.randint(0, 600, (MeteorNum,1)) 
YPos = nprand.randint(0, 800, (MeteorNum,1)) 

XYPos = np.hstack((XPos,YPos)) 
XYPos = np.vstack((XYPos, XYPos[0])) 
print XYPos 

#Distances: 
r = np.zeros((MeteorNum,MeteorNum),dtype=np.ndarray) 

for i in range(0, MeteorNum): 
    for x in range(0, MeteorNum): 
     r[x,i] = (XYPos[x,:] - XYPos[i,:]) 
r = r*10**5 
print r 

編輯

的D型參數秈稻獲取陣列所需的數據類型,例如, numpy.int8。默認是numpy.float64。

+0

是的!這對我有效!現在它給了我一個巨大的陣列,這是我需要的。然而,現在所有的元素都會說「數組」,然後是什麼,但是哦。它可以完成這項工作... dtype有什麼作用? – user3604362

+0

我編輯了我的答案,以定義dtype參數角色 – farhawa

+0

@ user3604362如果對你有幫助,你可以接受答案 – farhawa

1

要刪除的錯誤,我想你需要一個額外的維度,大小爲2,你的陣列r在:

r = np.zeros((MeteorNum,MeteorNum,2)) 

由於XYPos[x,:] - XYPos[i,:]在for循環有(2,)

這是一個形狀返回形狀(5, 5, 2)的單個數組。

+0

hmmm,no ...這個工作,但是我最終得到了幾個數組,但我只想要一個大陣列。 – user3604362

+0

@ user3604362真的嗎? 'r'應該是一個形狀爲'(5,5,2)'的數組。使用'r.shape'來檢查。 – atomh33ls

+0

'用戶',你是否混淆了幾個數組的3D數組?你是否理解嘗試將2個值放入'r'的一個槽中的問題? – hpaulj