[問題] Numpy 選取一樣的陣列

看板Python作者 (亨利王子)時間8年前 (2017/04/28 11:10), 8年前編輯推噓5(503)
留言8則, 4人參與, 最新討論串1/1
原因 : 最近在學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

04/28 14:47, , 1F
numpy -> pandas -> hadoop...
04/28 14:47, 1F

04/28 17:18, , 2F
因為條件是比對陣列 感覺有點麻煩
04/28 17:18, 2F

04/28 17:24, , 3F
arr[[np.array_equal(x, [1,2,3]) for x in arr]] 這樣?
04/28 17:24, 3F
抱歉想請問一下這樣下條件會出現下面的樣子耶 array([[4, 5, 6],[1, 2, 3],[1, 2, 3],[1, 2, 3],[4, 5, 6]])

04/28 21:24, , 4F
np.where((arr==(1,2,3)).all(axis=1))[0]
04/28 21:24, 4F

04/28 21:27, , 5F
numpy之類的你不告訴它沿著哪裡找(axis)就會像你那樣
04/28 21:27, 5F
感謝 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)有相差耶 好奇這個原理,是因為他會一個一個比 對?

04/28 21:29, , 6F
加了all才會一次比對整個row 不然會照位置比
04/28 21:29, 6F
我後來有去了解axis的概念了!!!感謝<(_ _)>

04/29 10:11, , 7F
print([a for a, b in enumerate(arr) if np.array_equ
04/29 10:11, 7F

04/29 10:12, , 8F
iv(b,[1,2,3])
04/29 10:12, 8F
感謝Metal大!!!我這樣寫成功了!! ※ 編輯: HenryLiKing (114.45.97.236), 04/30/2017 16:46:39
文章代碼(AID): #1P0hAyMG (Python)