numpy 按条件给元素赋值np.where、np.clip

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)原数组或者常数替换操作,即替换原来数组中的某些值。


np.clip(a, a_min, a_max, out=None)

Params
a_min, a_max:整数、类array数组或者None,下面逐一解读。

  • 整数时,将小于a_min的值替换为a_min。然后,将大于a_max的值替换为a_max。处于两者之间数保持不变。
  • 类array时,当a的形状是(m,n),a_min、a_max是(m,1)、(m,)或者是(m,n)。通俗讲,要么给a中每一个一维数组中每一个元素提供一个比较值,要么给a中每个一维数组提供一个统计的比较值,要么提供一个与一维数组形状形同的数组,然后广播。扩展到3维也是一样的道理。
  • None,当a_min为None时,表示小于amax的值保留原值。当a_max为None时,表示大于amin的值保留原值。 a_min和a_max只能有一个是None。

Returns:
返回一个与传入数组形状相同的数组。

举例:

arr
array([[ 7, -3, 12],
       [14,  0,  8]])

给二维数组中每一个数组传入一个统一的比较值

b
array([[1],
       [2]])

np.clip(arr,b,None)
array([[ 7,  1, 12],
       [14,  2,  8]])

传入一个和一维数组相同形状的数组,然后沿着轴0广播。

b
array([1, 4, 9])

np.clip(arr,b,arr)
array([[ 7,  4, 12],
       [14,  4,  9]])
  • 2
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值