我只是在玩一個粒子模擬器,我想用python和numpy來使用matplotlib儘可能高效地創建逼真的模擬器(這純粹是一種有趣的練習與python),我有一個問題,試圖計算距離的倒數。數組中的Python/Numpy索引
我有一個包含顆粒的像這樣的位置(X,Y)的陣列:
x = random.randint(0,3,10).reshape(5,2)
>>> x
array([[1, 1],
[2, 1],
[2, 2],
[1, 2],
[0, 1]])
這是在[0,3] 5個顆粒位置(x,y)的。現在,如果我要計算一個粒子間的距離(說與顆粒位置(0,1)),其餘的我會做類似
>>>x - [0,1]
array([[1, 0],
[2, 0],
[2, 1],
[1, 1],
[0, 0]])
的問題是我不希望採取的距離粒子本身:(0,0)。這長度爲0,倒數是無限的,並且沒有定義重力或色力。
所以,我試圖: 其中(x == [0,1])
>>>where(x==[0,1])
(array([0, 1, 4, 4]), array([1, 1, 0, 1]))
哪個不是在x數組中的(0,1)粒子的位置。那麼如何從x這樣的數組中挑出[0,1]的位置呢?上面的where()檢查x等於0或1,而不是x等於[0,1]。我如何做這個「numpylike」沒有循環?
ps:如何複製frack到代碼粘貼到stackoverflow?我的意思是不好的論壇有一個[code] .. [/ code]選項,而在這裏我花了15分鐘正確縮進代碼(因爲ubuntu上的標籤在鉻上只是跳出窗口,而不是用4個空格縮進....)非常煩人。
編輯:眼看第一個答案我想:
x
array([[0, 2],
[2, 2],
[1, 0],
[2, 2],
[1, 1]])
>>> all(x==[1,1],axis=1)
array([False, False, False, False, True], dtype=bool)
>>> all(x!=[1,1], axis=1)
array([ True, True, False, True, False], dtype=bool)
而這並不是我所期待的,則應該=返回數組WITHOUT [1,1]!但很可惜,它忽略了一個(1,0):
>>>x[all(x!=[1,1], axis=1)]
array([[0, 2],
[2, 2],
[2, 2]])
EDIT2:任何的伎倆,它更有邏輯上比所有我想,謝謝!
只需複製粘貼,選擇代碼,然後點擊「Ctrl + K」(或「代碼」工具欄按鈕)將其格式化爲代碼。 – voithos