根据另一个数组中的值对numpy数组的选择索引执行操作

编码旋钮

我有一个数组我有另一个数组,我称之为switch数组开关是一个布尔值数组(和np.nan对应于A中np.nan 3 x 3数组的位置),该数组确定选择A中的哪个3 x 3数组进行操作。

例:

switch = np.array([ True, False, False, False, np.nan])

a = np.array([[[ 0.,  0.,  0.],
        [ 9.,  0.,  0.],
        [ 3., 15.,  0.]],

       [[ 0.,  0.,  0.],
        [ 9.,  0.,  0.],
        [ 3., 15.,  0.]],

       [[ 0., 27.,  0.],
        [ 0.,  0.,  0.],
        [12., 18.,  0.]],

       [[ 0.,  0.,  6.],
        [12.,  0., 27.],
        [ 0.,  0.,  0.]],

       [[ np.nan, np.nan, np.nan],
        [np.nan, np.nan, np.nan],
        [ np.nan, np.nan, np.nan]]])

根据以上示例,最终选择的数组应为:

np.array([[[ 0.,  0.,  0.],
            [ 9.,  0.,  0.],
            [ 3., 15.,  0.]],

       [[ np.nan, np.nan, np.nan],
        [np.nan, np.nan, np.nan],
        [ np.nan, np.nan, np.nan]],

       [[ np.nan, np.nan, np.nan],
        [np.nan, np.nan, np.nan],
        [ np.nan, np.nan, np.nan]],

       [[ np.nan, np.nan, np.nan],
        [np.nan, np.nan, np.nan],
        [ np.nan, np.nan, np.nan]],

       [[ np.nan, np.nan, np.nan],
        [np.nan, np.nan, np.nan],
        [ np.nan, np.nan, np.nan]]])

我可以通过使用for循环使用if / else控制语句遍历A中的每个3 x 3数组来做到这一点,但我想知道是否有办法使用numpy中的内置功能来做到这一点For循环if / else语句可能比数组操作慢得多。我一直修修补补,但到目前为止还没有能够找到一个最佳numpy的解决方案。

我可以重组阵列开关,但是阵列A无法更改结构/形状。

广晃

您可以使用np.where

out = np.where(switch[:,None,None], a, np.nan)

或使用遮罩:

out = a.copy()
out[switch!=True] = np.nan

输出:

array([[[ 0.,  0.,  0.],
        [ 9.,  0.,  0.],
        [ 3., 15.,  0.]],

       [[nan, nan, nan],
        [nan, nan, nan],
        [nan, nan, nan]],

       [[nan, nan, nan],
        [nan, nan, nan],
        [nan, nan, nan]],

       [[nan, nan, nan],
        [nan, nan, nan],
        [nan, nan, nan]],

       [[nan, nan, nan],
        [nan, nan, nan],
        [nan, nan, nan]]])

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

根据来自另一个数组的argmax的索引从数组中选择值

根据存储在另一个数组或列表中的索引拆分 numpy 多维数组

根据另一个numpy数组中的值查找numpy数组的索引

在numpy中索引另一个数组

如何根据Numpy中另一个数组的分组值生成一个数组?

根据另一个数组中的值展开一个numpy数组

如何用另一个数组中唯一值的索引替换numpy数组中的重复值?

如何用另一个数组中找到的值的索引替换Python NumPy数组中的值?

根据另一个数组中的索引获取数组中的元素

根据另一个数组选择数组值

根据另一个数组选择字符串数组值

根据Python中另一个数组中的索引创建一个数组

C#根据另一个数组中的索引递增一个数组中的Int

根据另一个数组中的排序索引对数组重新排序

根据Python中另一个数组的值选择数组元素的有效方法?

根据另一个数组中的值删除嵌套对象数组中的值

根据另一个数组中的值替换数组中的值

使用PySpark数据帧时,根据索引从一个数组中定位值,然后复制到另一个数组中

numpy数组中的索引,其中另一个数组中的slice

如何用索引将另一个numpy数组中的值替换为另一个数组

根据另一个数组中的值替换一个数组中的值

如何从另一个数组中的一个数组中选择一个值?

numpy:对于一个数组中的每个元素,在另一个数组中查找索引

如何基于JavaScript中另一个数组的索引从数组中选择元素?

用另一个数组的相同索引的值替换一个数组中的值?

根据另一个数组的样本从numpy数组中获取样本

根据另一个数组替换numpy数组中的数字

用另一个数组的索引来索引一个numpy数组

根据另一个数组中的值从数组中删除对象