作者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://webptt.com/cn.aspx?n=bbs/Python/M.1493349052.A.590.html
1F:推 enjoyloli: numpy -> pandas -> hadoop...04/28 14:47
2F:推 hung0724: 因为条件是比对阵列 感觉有点麻烦04/28 17:18
3F:推 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]])
4F:推 abc2090614: np.where((arr==(1,2,3)).all(axis=1))[0]04/28 21:24
5F:→ 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)有相差耶 好奇这个原理,是因为他会一个一个比
对?
6F:→ abc2090614: 加了all才会一次比对整个row 不然会照位置比04/28 21:29
我後来有去了解axis的概念了!!!感谢<(_ _)>
7F:推 Metal5566: print([a for a, b in enumerate(arr) if np.array_equ04/29 10:11
8F:→ Metal5566: iv(b,[1,2,3])04/29 10:12
感谢Metal大!!!我这样写成功了!!
※ 编辑: HenryLiKing (114.45.97.236), 04/30/2017 16:46:39