numpy的where方法
Posted 月疯
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了numpy的where方法相关的知识,希望对你有一定的参考价值。
1. np.where(condition, x, y)
满足条件(condition),输出x,不满足输出y。
例子1:
如果b小于5,那么就取b,如果不是,那么就取b*10
import numpy as np
b=np.arange(10)
c=np.where(b<5,b,b*10)
print(c)
结果:
F:\\开发工具\\pythonProject\\tools\\venv\\Scripts\\python.exe F:/开发工具/pythonProject/tools/bys/test1.py
[ 0 1 2 3 4 50 60 70 80 90]
Process finished with exit code 0
例子2:
c=np.where([[True,False], [True,True]], # 官网上的例子
[[1,2], [3,4]],
[[9,8], [7,6]])
print(c)
array([[1, 8],
[3, 4]])
2. np.where(condition)
只有条件 (condition),没有x和y,则输出满足条件 (即非0) 元素的坐标 (等价于numpy.nonzero)。
>>> a = np.array([2,4,6,8,10])
>>> np.where(a > 5) # 返回索引
(array([2, 3, 4]),)
>>> a[np.where(a > 5)] # 等价于 a[a>5]
array([ 6, 8, 10])
>>> np.where([[0, 1], [1, 0]])
(array([0, 1]), array([1, 0]))
[[0,1],[1,0]]
的真值为两个1,各自的第一维坐标为[0,1]
,第二维坐标为[1,0]
a = np.arange(27).reshape(3,3,3)
>>> a
array([[[ 0, 1, 2],
[ 3, 4, 5],
[ 6, 7, 8]],
[[ 9, 10, 11],
[12, 13, 14],
[15, 16, 17]],
[[18, 19, 20],
[21, 22, 23],
[24, 25, 26]]])
>>> np.where(a > 5)
(array([0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 2, 2, 2, 2, 2, 2, 2, 2]),
array([2, 2, 2, 0, 0, 0, 1, 1, 1, 2, 2, 2, 0, 0, 0, 1, 1, 1, 2, 2, 2]),
array([0, 1, 2, 0, 1, 2, 0, 1, 2, 0, 1, 2, 0, 1, 2, 0, 1, 2, 0, 1, 2]))
# 符合条件的元素为
[ 6, 7, 8]],
[[ 9, 10, 11],
[12, 13, 14],
[15, 16, 17]],
[[18, 19, 20],
[21, 22, 23],
[24, 25, 26]]]
所以np.where会输出每个元素的对应的坐标,因为原数组有三维,所以tuple中有三个数组。
以上是关于numpy的where方法的主要内容,如果未能解决你的问题,请参考以下文章
有没有比使用 np.where 更快的方法来迭代一个非常大的 2D numpy 数组?
numpy.where和numpy.piecewise的用法
如何反转 numpy.where (np.where) 函数