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
不能被广播。
- 支持平台:
Ascend
GPU
CPU
样例:
>>> 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]]