mindspore.numpy.choose

mindspore.numpy.choose(a, choices, mode='clip')[源代码]

从索引数组和要选择的数组列表构造一个新数组。给定一个包含整数的“索引”数组 a 和一个由n个数组( choices )组成的序列, a 和每个选择数组首先会根据需要广播为相同shape的数组;我们称这些数组为 BaBchoices[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=wrapmode=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]]