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) 函数

numpy高级函数:where与extract

Numpy根据条件批量修改元素的值(numpy.where)

numpy.where() 详细的分步说明/示例 [关闭]