Python 学习笔记(13)

高级函数choose的使用

通过某一些条件去“选择”相关的元素,choose的操作会比自己使用for-if-else效率要高,类似的还有select函数

1、choose()函数的定义
def choose(a, choices, out=None, mode=‘raise’):

  • 参数 a :它必须是一个 int 型的 数组,并且 a 中的元素,必须是0~n-1之间的数,这里的n表示的就是数组choices数组最外层的维度数。
  • choices:表示的是要操作的数组,要注意的是choices的数组的维度是一定要和a进行匹配的,如果匹配不了,会出现错误。
  • 参数out:接收运算结果的数组,它的维度一定要和 a 是一样的,是可选参数。
    参数mode:默认的是raise,表示的是a数组中的元素不能超过 n ,她还有两个可选值,
    clip:将 a 中的 元素 如果小于0,则将其变为0,如果大于n-1,则变为n-1
    wrap:将a中的值 value变为value mod n,即值除以n的余数。

说的通俗一点,就是参数a这个数组的值不能超过choices数组的维度的最大值,然后a这个数组中每一个位置的数,代表的 是choices数组中的元素的索引,比如:

import numpy as np
control = np.array([[1,0,1],
                    [2,1,0],
                    [1,2,2]])

np.choose(control, [10, 11, 12])

调用choose会产生一个和control数组一样大小的数组,这个数组的每个元素是什么呢?control第一个是1,代表在[10,11,12]中的第二个元素,即11,然后第二个是0,即第一个元素,10,以此类推。

i0 = np.array([[0,1,2],
               [3,4,5],
               [6,7,8]])
i2 = np.array([[20,21,22],
               [23,24,25],
               [26,27,28]])
control = np.array([[1,0,1],
                    [2,1,0],
                    [1,2,2]])

np.choose(control, [i0, 10, i2])

结果是

array([[10,  1, 10],
       [23, 10,  5],
       [10, 27, 28]])

即control的第一行第一列的元素是i0数组的第一行第一列的数,第二行第一列的元素是i2数组中的第二行第一列的数。

接下来给出两个觉得很不错的操作

  1. 将数组中所有小于 10 的值变成了 10
In [4]:
a = np.array([[ 0, 1, 2], 
              [10,11,12], 
              [20,21,22]])

a < 10

Out[4]:
array([[ True,  True,  True],
       [False, False, False],
       [False, False, False]], dtype=bool)

In [5]:
np.choose(a < 10, (a, 10))
Out[5]:
array([[10, 10, 10],
       [10, 11, 12],
       [20, 21, 22]])
  1. 下面的例子将数组中所有小于 10 的值变成了 10,大于 15 的值变成了 15。
In [6]:
a = np.array([[ 0, 1, 2], 
              [10,11,12], 
              [20,21,22]])

lt = a < 10
gt = a > 15

choice = lt + 2 * gt
choice

Out[6]:
array([[1, 1, 1],
       [0, 0, 0],
       [2, 2, 2]])

In [7]:
np.choose(choice, (a, 10, 15))

Out[7]:
array([[10, 10, 10],
       [10, 11, 12],
       [15, 15, 15]])
  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值