numpy np.where

np.where(condition, [x, y])

属于numpy的元素选择函数
Parameters:
condition:条件,是一个类array的bool数组。个人根绝是一个bool mask。
x,y:类array数组。当condition是True时返回x,为False时返回y。x与必须同时给出或者同时不给出,不能只给出一个。当都不给出时,依据nonzero返回处理。
Returns:
1、当只给出condition时,返回一个tuple,该tuple就是满足condition的元素的index。tuple元素的个数是原来array的维度,一维一个元素,二维两个元素。每个元素对应位置数据组合起来就是满足condition的元素的index。
2、给出x和y,返回一个和condition相同形状的数组。这里x与y的shape很重要,而且由condition的shape决定。当condition是(k,m,n)时,x与y 的shape依赖condition的维度。x,y的shape如下如图:在这里插入图片描述
当满足条件时,会根据x和y的维度取替换condition上的对应值。

使用举例1:

arr = np.arange(12).reshape(3,4)
arr
array([[ 0,  1,  2,  3],
       [ 4,  5,  6,  7],
       [ 8,  9, 10, 11]])

np.where(arr > 6)
(array([1, 2, 2, 2, 2], dtype=int64), array([3, 0, 1, 2, 3], dtype=int64))

  返回一个tuple,两个元素,因为arr的shape是(3,4)是二维的。第一个元素是行,第二个元素是列。第一个满足条件的元素的第1行第3列的元素,即元素7。

使用举例2:

np.where(arr > 6, 0, arr)
array([[0, 1, 2, 3],
       [4, 5, 6, 0],
       [0, 0, 0, 0]])

  满足条件的替换为0,不满足的返回arr中的值。从arr取值时是按照索引取选取的。这里要注意,当x或y的维度小于condition的维度时,忽略高维度的索引,比如忽略k,只根据m和n的值从x或y取数。个人理解就一句话:用同一个维度(粒度)上的数据取替换同一个维度(粒度)上的数据。
  实际操作中使用较多的还是用(k,m,n)原数组或者常数替换操作,即替换原来数组中的某些值。

发布了25 篇原创文章 · 获赞 14 · 访问量 1147

猜你喜欢

转载自blog.csdn.net/A_pinkpig/article/details/105235294