Numpy 在尝试构建布尔掩码时广播多维数组

Numpy Broadcasting multidimentional arrays while trying to build a boolean mask

我在三维 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。

这是我目前的尝试:

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

如有任何帮助,我们将不胜感激。

检查 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