看板 Python 關於我們 聯絡資訊
原因 : 最近在學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