Python3/Numpy:ndarray条件索引

2024-05-17 19:44:59 发布

您现在位置:Python中文网/ 问答频道 /正文

我来自MATLAB背景,我试图用python/numpy编写:

[l, m, n] = ndgrid(1:size(dct, 1), 1:size(dct, 2), 1:size(dct, 3));
mycell{i, j} = dct(...
    min.^2 <= l.^2 + m.^2 + n.^2 & ...
    l.^2 + m.^2 + n.^2 <= max.^2)';

所以代码应该取所有索引(例如x,y,z)的值,这些值在min和{}之间,即min^2 < x^2 + y^2 + z^2 < max^2

我唯一能找到的就是用这个索引处数组值的条件来索引数组的一些值,但是我想用索引本身的条件来索引。

我读过关于广播和ix_函数和高级索引的文章,但是我不能把它们结合起来。


Tags: 函数代码numpysize数组min条件max
1条回答
网友
1楼 · 发布于 2024-05-17 19:44:59

NumPy为我们提供了创建开放网格的功能,它可以在^{}的帮助下替代3D网格。这将从本质上取代MATLAB代码中的ndgrid部分,但会带来额外的好处(请继续阅读以了解更多详细信息)。然后,可以将这些网格划分成正方形并添加以执行l.^2 + m.^2 + n.^2的等效操作,而无需实际创建lm和{}的{}版本。这是一个巨大的性能标准,已经在^{}中进行了探讨,并显示了性能优势。在

因此,移植到NumPy,我们会-

m,n,r = dct.shape    
x,y,z = np.ogrid[0:m,0:n,0:r]
vals = x**2+y**2+z**2
mycell[i][j] = dct[(min**2 <= vals) & (vals <= max**2)]

相关问题 更多 >