mindspore.numpy.choose
- mindspore.numpy.choose(a, choices, mode='clip')[源代码]
从索引数组和要选择的数组列表构造一个新数组。给定一个包含整数的“索引”数组
a和一个由n个数组(choices)组成的序列,a和每个选择数组首先会根据需要广播为相同shape的数组;我们称这些数组为Ba和Bchoices[i], i=0,…,n-1,并且对于每个i,必然有 \(Ba.shape == Bchoices[i].shape\) 。然后,按照以下方式创建一个新数组,shape为Ba.shape:如果
mode='raise'(默认值),那么首先,a(因此Ba)的每个元素必须在[0, n-1]范围内;假设i(在该范围内)是Ba中(j0, j1, ..., jm)位置的值——那么新数组中相同位置的值就是Bchoices[i]在该位置的值;如果
mode='wrap',则a(因此Ba)中的值可以是任何(带符号)整数;使用模运算将超出[0, n-1]范围的整数映射回该范围内;然后像上述一样构造新数组;如果
mode='clip',则a(因此Ba)中的值可以是任何(带符号)整数;负整数被映射为0;大于n-1的值被映射为n-1;然后像上述一样构造新数组。
说明
不支持Numpy的
out参数。不支持mode = 'raise',默认mode为'clip'。- 参数:
a (int array) - 该数组必须包含
[0, n-1]范围内的整数,其中n是选择数组的数量,除非使用mode=wrap或mode=clip,在这些情况下,任何整数都可以。choices (数组的序列) - 选择数组。
a和所有choices必须可以广播为相同的shape。如果choices本身是一个数组,则其最外层维度(即choices.shape[0]对应的维度)定义为“sequence”。mode ('raise', 'wrap', 'clip', 可选) - 指定如何处理超出
[0, n-1]范围的索引:'raise' - 抛出错误;
'wrap' - 循环;
'clip' - 限制在范围内。'clip'模式意味着所有过大的索引都将被替换为该轴最后一个元素的索引。请注意,这将禁止使用负数进行索引。
- 返回:
Tensor,合并的结果。
- 异常:
ValueError - 如果
a与任一choices不能被广播。
- 支持平台:
AscendGPUCPU
样例:
>>> import mindspore.numpy as np >>> choices = [[0, 1, 2, 3], [10, 11, 12, 13], [20, 21, 22, 23], [30, 31, 32, 33]] >>> print(np.choose([2, 3, 1, 0], choices)) [20 31 12 3] >>> print(np.choose([2, 4, 1, 0], choices, mode='clip')) [20 31 12 3] >>> print(np.choose([2, 4, 1, 0], choices, mode='wrap')) [20 1 12 3] >>> a = [[1, 0, 1], [0, 1, 0], [1, 0, 1]] >>> choices = [-10, 10] >>> print(np.choose(a, choices)) [[ 10 -10 10] [-10 10 -10] [ 10 -10 10]]