首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在NumPy中创建二维汉宁、汉明、布莱克曼、高斯窗口

在NumPy中创建二维汉宁、汉明、布莱克曼、高斯窗口
EN

Stack Overflow用户
提问于 2021-01-28 23:26:29
回答 1查看 770关注 0票数 2

我有兴趣在NumPy中创建二维汉宁,汉明,布莱克曼等窗口。我知道在1D版本的NumPy中有现成的函数,比如np.blackman(51)np.hamming(51)np.kaiser(51)np.hanning(51)等。

如何创建它们的2D版本?我不确定下面的解决方案是不是正确的方法。

代码语言:javascript
复制
window1d = np.blackman(51)
window2d = np.sqrt(np.outer(window1d,window1d)) 

-编辑

令人担忧的是,np.sqrt只期望正值,而np.outer(window1d,window1d)肯定会有一些负值。一种解决方案是放弃np.sqrt

有什么建议如何将这些一维函数扩展到二维函数吗?

EN

回答 1

Stack Overflow用户

发布于 2021-01-29 12:30:38

这在我看来是合理的。如果您想验证您正在做的事情是否合理,可以尝试绘制出您正在创建的内容。

代码语言:javascript
复制
import numpy as np
import matplotlib.pyplot as plt


x = np.linspace(0, 1.5, 51)
y = np.linspace(0, 1.5, 51)

window1d = np.abs(np.blackman(51))
window2d = np.sqrt(np.outer(window1d,window1d))

X, Y = np.meshgrid(x, y)
Z = window2d

fig = plt.figure()
ax = plt.axes(projection='3d')
ax.contour3D(X, Y, Z, 50, cmap='viridis')
ax.set_xlabel('x')
ax.set_ylabel('y')
ax.set_zlabel('z');

plt.show()

这给了我们-

这看起来像是1d图的2d泛化,看起来像-

然而,在最初创建1d版本时,我必须做window1d = np.abs(np.blackman(51)),因为否则,你将在最终的2D数组中得到很小的负值,你不能对其进行sqrt

免责声明:我不熟悉这些功能或它们通常的用例。但这些情节的形状似乎是有道理的。如果这些函数的用例中实际值很重要,这可能是关闭的。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/65940166

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档