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,例如使用 any
或 all
。
我在三维 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,例如使用 any
或 all
。