我想创建一个3D遮罩数组,它是基于一个2维的"深度"数组来表示3维空间中填充深度的程度.我曾希望在NumPy中会有一个向量化的解决方案来解决这个问题,而不是求助于for循环. 例如:

tst = np.arange(1, 10).reshape(3,3) # depths referred to above

blk = np.zeros(shape=(3,3,9)) # the output 3d array to be filled with ones or zeros

以下示例位置的预期结果为:

blk[0,0]
array([1., 0., 0., 0., 0., 0., 0., 0., 0.])
blk[1,2]
array([1., 1., 1., 1., 1., 1., 0., 0., 0.])
blk[2,2]
array([1., 1., 1., 1., 1., 1., 1., 1., 1.])

有谁对此有什么 idea /提示吗?

推荐答案

你可以使用广播,而不是numpy.arange:

blk = (tst[..., None] > np.arange(tst.max())[None, None]).astype(int)

输出:

array([[[1, 0, 0, 0, 0, 0, 0, 0, 0],     # blk[0, 0]
        [1, 1, 0, 0, 0, 0, 0, 0, 0],
        [1, 1, 1, 0, 0, 0, 0, 0, 0]],

       [[1, 1, 1, 1, 0, 0, 0, 0, 0],
        [1, 1, 1, 1, 1, 0, 0, 0, 0],
        [1, 1, 1, 1, 1, 1, 0, 0, 0]],    # blk[1, 2]

       [[1, 1, 1, 1, 1, 1, 1, 0, 0],
        [1, 1, 1, 1, 1, 1, 1, 1, 0],
        [1, 1, 1, 1, 1, 1, 1, 1, 1]]])   # blk[2, 2]

Python相关问答推荐

使用Python计算cmyk,在PDF上发现覆盖范围

try 从网站获取表(ValueRight:如果使用所有纯量值,则必须传递索引)

使用pandas MultiIndex进行不连续 Select

Django文件上传不起作用:文件未出现在媒体目录或数据库中

将词典写入Excel

从 struct 类型创建MultiPolygon对象,并使用Polars列出[list[f64]列

PyQt5如何将pyuic 5生成的Python类添加到QStackedWidget中?

使用regex分析具有特定字符的字符串(如果它们存在)

通过仅导入pandas来在for循环中进行多情节

如何自动抓取以下CSV

使用SciPy进行曲线匹配未能给出正确的匹配

时间序列分解

Pandas - groupby字符串字段并按时间范围 Select

把一个pandas文件夹从juyter笔记本放到堆栈溢出问题中的最快方法?

递归访问嵌套字典中的元素值

改进大型数据集的框架性能

Python逻辑操作作为Pandas中的条件

计算天数

与命令行相比,相同的Python代码在Companyter Notebook中运行速度慢20倍

在pandas数据框中计算相对体积比指标,并添加指标值作为新列