【问题标题】:Numpy Broadcasting multidimentional arrays while trying to build a boolean maskNumpy 广播多维数组,同时尝试构建布尔掩码
【发布时间】:2021-09-10 05:59:21
【问题描述】:

在三维 numpy 数组上构建布尔掩码时遇到问题。 数组可以想象如下,例如形状为 (18,2,7) 的数组,其中包含随机数:

import random
import numpy as np

a = np.array([[[random.random() for i in range(7)] for j in range(2)] for k in range(18)])

还有一个形状为 (18,2,1) 的预定义布尔掩码

x = np.zeros((18,2,1), dtype="bool")

重要提示:我无法在此处更改变量定义,必须使用此形状。

我想遍历 a 并创建一个 x 掩码,如果 a 中的值小于 0.5,则为 True。

这是我目前的尝试:

我也尝试将元素直接添加到数组中,但出现广播错误。有没有办法让数组“自动”扩展创建我需要的地图?

任何帮助将不胜感激。

【问题讨论】:

    标签: python arrays numpy mask array-broadcasting


    【解决方案1】:

    查看a的形状:

    In [22]: a.shape
    Out[22]: (18, 2, 7)
    

    顺便提一个更直接的生成同样大小的随机数组的方法:

    In [23]: a=np.random.random_sample((18,2,7))
    
    In [24]: x = np.zeros((18,2,1), dtype="bool")
    

    您的循环测试a 的所有元素,如下所示:

    In [25]: (a<0.5).shape
    Out[25]: (18, 2, 7)
    

    对于给定的i,j,您的knum 是一个包含7 个元素的列表。错误告诉您的是它不能将 7 个元素放入 toe x[i,j] 插槽中,该插槽只能容纳一项。

    Numpy 数组不会“自动扩展”。您可以创建一个

    x = np.zeros((18,2,7), dtype="bool")
    

    或者您可以以某种方式将 (18,2,7) 的最后一个维度减少为 1,例如使用 anyall

    【讨论】:

    • 感谢您的回复并帮助我以更好的方式编写它!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-08-14
    • 1970-01-01
    • 2021-09-12
    • 2018-12-13
    • 1970-01-01
    • 2019-11-04
    • 1970-01-01
    相关资源
    最近更新 更多