如果满足条件,则在 3D 数组中替换 2D 子数组

苗条的男孩

我有一个看起来像这样的矩阵:

a = np.random.rand(3, 3, 3)

[[[0.04331462, 0.30333583, 0.37462236],
  [0.30225757, 0.35859228, 0.57845153],
  [0.49995805, 0.3539933,  0.11172398]],

 [[0.28983508, 0.31122743, 0.67818926],
  [0.42720309, 0.24416101, 0.5469823 ],
  [0.22894097, 0.76159389, 0.80416832]],

 [[0.25661154, 0.64389696, 0.37555374],
  [0.87871659, 0.27806621, 0.3486518 ],
  [0.26388296, 0.8993144,  0.7857116 ]]]

我想检查每个块的值是否小于 0.2。如果值小于 0.2,则整个块等于 0.2。在这种情况下:

[[[0.2 0.2 0.2]
  [0.2 0.2 0.2]
  [0.2 0.2 0.2]]

[[0.28983508 0.31122743 0.67818926]
 [0.42720309 0.24416101 0.5469823 ]
 [0.22894097 0.76159389 0.80416832]]

[[0.25661154 0.64389696 0.37555374]
 [0.87871659 0.27806621 0.3486518 ]
 [0.26388296 0.8993144  0.7857116 ]]]
乔治

这是获得所需内容的矢量化方式。
a你的例子为例:

a[(a < 0.2).any(axis=1).any(axis=1)] = 0.2
print(a)

给出:

array([[[ 0.2       ,  0.2       ,  0.2       ],
        [ 0.2       ,  0.2       ,  0.2       ],
        [ 0.2       ,  0.2       ,  0.2       ]],

       [[ 0.28983508,  0.31122743,  0.67818926],
        [ 0.42720309,  0.24416101,  0.5469823 ],
        [ 0.22894097,  0.76159389,  0.80416832]],

       [[ 0.25661154,  0.64389696,  0.37555374],
        [ 0.87871659,  0.27806621,  0.3486518 ],
        [ 0.26388296,  0.8993144 ,  0.7857116 ]]])

解释:

再举一个例子,其中每一步都会更加清晰:

a = np.array([[[0.51442898, 0.90447442, 0.45082496],
               [0.59301203, 0.30025497, 0.43517362],
               [0.28300437, 0.64143037, 0.73974422]],
              [[0.228676  , 0.59093859, 0.14441217],
               [0.37169639, 0.57230533, 0.81976775],
               [0.95988687, 0.43372407, 0.77616701]],
              [[0.03098771, 0.80023031, 0.89061113],
               [0.86998351, 0.39619143, 0.16036088],       
               [0.24938437, 0.79131954, 0.38140462]]])

让我们看看哪些元素小于 0.2:

print(a < 0.2)

给出:

array([[[False, False, False],
        [False, False, False],
        [False, False, False]],

       [[False, False,  True],
        [False, False, False],
        [False, False, False]],

       [[ True, False, False],
        [False, False,  True],
        [False, False, False]]])

从这里我们想得到那些至少有一个True元素的二维数组的索引[False, True, True]我们np.any为此需要请注意,我将在np.ndarray.any这里使用方法链而不是嵌套np.any. 1

现在只使用(a < 0.2).any()将给出只是True因为默认情况下它在所有维度上执行逻辑或。我们必须指定axis参数。在我们的例子中,我们可以使用axis=1axis=22

print((a < 0.2).any(axis=1))

给出3

array([[False, False, False],
       [False, False,  True],
       [ True, False,  True]])

从这里我们通过.any()沿行应用另一个布尔索引来获得所需的布尔索引

print((a < 0.2).any(axis=1).any(axis=1))

给出:

array([False,  True,  True])

最后,我们可以简单地使用这个布尔索引数组来替换原始数组的值:

a[(a < 0.2).any(axis=1).any(axis=1)] = 0.2
print(a)

给出:

array([[[0.51442898, 0.90447442, 0.45082496],
        [0.59301203, 0.30025497, 0.43517362],
        [0.28300437, 0.64143037, 0.73974422]],

       [[0.2       , 0.2       , 0.2       ],
        [0.2       , 0.2       , 0.2       ],
        [0.2       , 0.2       , 0.2       ]],

       [[0.2       , 0.2       , 0.2       ],
        [0.2       , 0.2       , 0.2       ],
        [0.2       , 0.2       , 0.2       ]]])

1只是比较链接:

a[(a < 0.2).any(axis=1).any(axis=1)] = 0.2

带嵌套:

a[np.any(np.any(a < 0.2, axis=1), axis=1)] = 0.2

我认为后者更令人困惑。

2对我来说,这起初很难理解。帮助我的是绘制一个 3x3x3 立方体的图像,打印不同轴的结果,并检查哪个轴对应哪个方向。此外,这里是np.sum在 3D 情况下使用轴的说明numpy 多维数组中的轴。

3可以期望立即获得[False, True, True],但情况并非如此。有关解释,请参阅:矩阵的 numpy.any 上的小说明

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

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

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

使用numpy使用2D数组的值更改3D数组中的子数组

来自分类Dev

从numpy中的3d数组中删除2d子数组

来自分类Dev

在3D数组中查找2D数组

来自分类Dev

如果满足条件,则在 JavaScript 中合并数组中的对象

来自分类Dev

numpy:在元素满足条件的2D数组中计数

来自分类Dev

C传递3D数组的2D子集

来自分类Dev

从 3D numpy 数组中提取 2D

来自分类Dev

如何根据每行的条件替换np 2d数组中的值

来自分类Dev

迭代Python中3d数组中包含的2d数组

来自分类Dev

如何在3D Numpy数组中查找2D数组的行

来自分类Dev

从python中的3D数组切片创建新的2D数组?

来自分类Dev

朱莉娅,将2d数组合并到3d数组中?

来自分类Dev

在Matlab 3D数组中查找重复的2D数组

来自分类Dev

在Matlab 3D数组中查找重复的2D数组

来自分类Dev

在Matlab 3D数组中查找重复的2D数组

来自分类Dev

如何通过在MATLAB中控制2D数组的列来创建3D数组?

来自分类Dev

用numpy中的3d数组索引2d数组

来自分类Dev

函数中的C memcpy 2D数组到3D数组

来自分类Dev

在Python中从现有2D数组创建3D数组

来自分类Dev

通过乘以numpy中的向量将2D数组转换为3D数组

来自分类Dev

将 3D pandas 数组中的值连接到“,”,使其成为 2D 数组

来自分类Dev

Python:从 3d numpy 数组中的 2d 数组访问保存的点

来自分类Dev

替换为Java中的2D数组?

来自分类Dev

在3D阵列中替换2D子阵列

来自分类Dev

如何使用numpy在现有2D数组中添加2D子数组?

来自分类Dev

在元素大于阈值的2D数组中查找子2D数组的索引

来自分类Dev

如何使1d数组乘以2d数组导致python的3d数组

来自分类Dev

如何使1d数组乘以2d数组导致python的3d数组

来自分类Dev

如何将2D numpy数组与3D数组矩阵相乘以得到3D数组?

Related 相关文章

  1. 1

    使用numpy使用2D数组的值更改3D数组中的子数组

  2. 2

    从numpy中的3d数组中删除2d子数组

  3. 3

    在3D数组中查找2D数组

  4. 4

    如果满足条件,则在 JavaScript 中合并数组中的对象

  5. 5

    numpy:在元素满足条件的2D数组中计数

  6. 6

    C传递3D数组的2D子集

  7. 7

    从 3D numpy 数组中提取 2D

  8. 8

    如何根据每行的条件替换np 2d数组中的值

  9. 9

    迭代Python中3d数组中包含的2d数组

  10. 10

    如何在3D Numpy数组中查找2D数组的行

  11. 11

    从python中的3D数组切片创建新的2D数组?

  12. 12

    朱莉娅,将2d数组合并到3d数组中?

  13. 13

    在Matlab 3D数组中查找重复的2D数组

  14. 14

    在Matlab 3D数组中查找重复的2D数组

  15. 15

    在Matlab 3D数组中查找重复的2D数组

  16. 16

    如何通过在MATLAB中控制2D数组的列来创建3D数组?

  17. 17

    用numpy中的3d数组索引2d数组

  18. 18

    函数中的C memcpy 2D数组到3D数组

  19. 19

    在Python中从现有2D数组创建3D数组

  20. 20

    通过乘以numpy中的向量将2D数组转换为3D数组

  21. 21

    将 3D pandas 数组中的值连接到“,”,使其成为 2D 数组

  22. 22

    Python:从 3d numpy 数组中的 2d 数组访问保存的点

  23. 23

    替换为Java中的2D数组?

  24. 24

    在3D阵列中替换2D子阵列

  25. 25

    如何使用numpy在现有2D数组中添加2D子数组?

  26. 26

    在元素大于阈值的2D数组中查找子2D数组的索引

  27. 27

    如何使1d数组乘以2d数组导致python的3d数组

  28. 28

    如何使1d数组乘以2d数组导致python的3d数组

  29. 29

    如何将2D numpy数组与3D数组矩阵相乘以得到3D数组?

热门标签

归档