作者HenryLiKing (亨利王子)
看板Python
標題[問題] Numpy 選取一樣的陣列
時間Fri Apr 28 11:10:46 2017
原因 :
最近在學python
聽到很多人再推薦一定要會活用numpy
所以我就在研究這大家都推的咚咚了
研究一陣子後
我突發奇想想說創一個陣列
ex: arr = np.array([ [1,2,3],[4,5,6],[7,8,9],[1,2,30],[1,2,3] ])
# arr.shape 是 (5,3)
問題:
我想arr裡面row是[1,2,3]的row index找出來
錯誤嘗試:
我的寫法是 arr[ arr[:]==[1,2,3] ]
想法是
arr[:]==[1,2,3] 會回傳一個一維陣列 是把 row為[1,2,3]的都標記為True
在把arr標記為True的row輸出出來
但是出現的答案跟我想的完全不同!!!!
想請教一下我的法是不是哪裡出問題了
如果我的想法說的不清楚我會補充說明的!
感覺numpy真的很好玩,希望能搞懂!!!!
=====================================
EDIT:
感謝各位大大的幫助
我後來研究了好久 numpy 內建的函式 ex:all , where , unique等
發現原來可以做的事比我想得多好多喔....
學到了好多!!
三維版本:
arr = [ [[1, 2, 3],[4, 5, 6]], [[1, 2, 3],[7, 8, 9]] ]
abc2090614大 的三維寫法:
np.where((arr==[1,2,3]).all(axis=2))
#針對Z軸做 是否所有元素都是 True 的檢查
Metal5566大 的三維寫法:
for ia,col in enumerate(arr):
for ib,deep in enumerate(col):
#對每行每列的Z軸做檢查 和[1,2,3]一樣的就print出來!
if np.array_equal(deep, [1,2,3]):
print([ia, ib])
抱歉我寫的不夠pythonic......
--
※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 140.138.24.185
※ 文章網址: https://www.ptt.cc/bbs/Python/M.1493349052.A.590.html
推 enjoyloli: numpy -> pandas -> hadoop...04/28 14:47
推 hung0724: 因為條件是比對陣列 感覺有點麻煩04/28 17:18
推 hung0724: arr[[np.array_equal(x, [1,2,3]) for x in arr]] 這樣?04/28 17:24
抱歉想請問一下這樣下條件會出現下面的樣子耶
array([[4, 5, 6],[1, 2, 3],[1, 2, 3],[1, 2, 3],[4, 5, 6]])
推 abc2090614: np.where((arr==(1,2,3)).all(axis=1))[0]04/28 21:24
→ abc2090614: numpy之類的你不告訴它沿著哪裡找(axis)就會像你那樣04/28 21:27
感謝 abc大 我成功了!!
想請問一下,好齊心驅使下我嘗試用 np.where( arr==[1,2,3] ) 會跑出下面這個答案
(array([0, 0, 0, 3, 3, 4, 4, 4], dtype=int64),
array([0, 1, 2, 0, 1, 0, 1, 2], dtype=int64))
但是我發現他的shape會跟我的(5,3)有相差耶 好奇這個原理,是因為他會一個一個比
對?
→ abc2090614: 加了all才會一次比對整個row 不然會照位置比04/28 21:29
我後來有去了解axis的概念了!!!感謝<(_ _)>
推 Metal5566: print([a for a, b in enumerate(arr) if np.array_equ04/29 10:11
→ Metal5566: iv(b,[1,2,3])04/29 10:12
感謝Metal大!!!我這樣寫成功了!!
※ 編輯: HenryLiKing (114.45.97.236), 04/30/2017 16:46:39