- c - 在位数组中找到第一个零
- linux - Unix 显示有关匹配两种模式之一的文件的信息
- 正则表达式替换多个文件
- linux - 隐藏来自 xtrace 的命令
据我所知,这些方法都在各自的 DLL 中作为 C 函数实现,而且 ndimage
版本似乎更快(两个实现都没有使用并行代码,比如调用 blas或 MKL)。
此外,当我尝试通过运行以下代码检查它们是否返回相同的结果时,相等断言失败了。我无法从文档中弄清楚这两种方法之间的功能差异究竟应该是什么(文档也不是很清楚 0
相对于内核起源位置的含义;来自例如,我推断它在中心,但我可能错了)。
from numpy import random, allclose
from scipy.ndimage.filters import convolve as convolveim
from scipy.signal import convolve as convolvesig
a = random.random((100, 100, 100))
b = random.random((10,10,10))
conv1 = convolveim(a,b, mode = 'constant')
conv2 = convolvesig(a,b, mode = 'same')
assert(allclose(conv1,conv2))
谢谢!
最佳答案
这两个函数在处理边界时有不同的约定。要使您的调用在功能上相同,请将参数 origin=-1
或 origin=(-1,-1,-1)
添加到对 convolveim 的调用
:
In [46]: a = random.random((100,100,100))
In [47]: b = random.random((10,10,10))
In [48]: c1 = convolveim(a, b, mode='constant', origin=-1)
In [49]: c2 = convolvesig(a, b, mode='same')
In [50]: allclose(c1,c2)
Out[50]: True
仅当 b
的维度是偶数时才移动原点。当它们为奇数时,函数在使用默认 origin=0
时一致:
In [88]: b = random.random((11,11,11))
In [89]: c1 = convolveim(a, b, mode='constant')
In [90]: c2 = convolvesig(a, b, mode='same')
In [91]: allclose(c1,c2)
Out[91]: True
关于python - scipy.ndimage.filters.convolve 和 scipy.signal.convolve 有什么区别?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16895405/
据我所知,这些方法都在各自的 DLL 中作为 C 函数实现,而且 ndimage 版本似乎更快(两个实现都没有使用并行代码,比如调用 blas或 MKL)。 此外,当我尝试通过运行以下代码检查它们是否
我注意到 numpy.convolve 在足够复杂的信号上产生奇怪的结果。这是一个简单的测试示例: import numpy as np import matplotlib.pyplot as plt
错误信息: operands could not be broadcast together with shapes (603) (613) 我该怎么办? 两个列表的长度是否需要相同? 或者我应该用零
卷积形状为 (3, 20, 30) 的输入张量( channel 优先符号)与 8形状过滤器 (3, 5, 7)应该导致形状张量 (8, 24, 16) .我正在尝试使用 Eigen::Tensor:
如何求下面的正方形与高斯统一之间的卷积幅度? L = 5 x = 1 t_total = L+2*x tlist = np.linspace(0,t_total,100) # Square pulse
我需要在Python中实现这个Excel公式 SUMPRODUCT($C$10:D$10;$C$30:D$30;reverse($C$40:D$40);reverse($C$50:D$50)) 我用n
我正在尝试使用 numpy.convolve 函数将两个多项式相乘。我原以为这会很简单,但我发现它并不总是返回正确的产品。 乘法的实现非常简单: def __mul__(self, other):
假设我有两个函数, f(t) = sin(t) 和 g(t) = cost(t) 我知道f和g的卷积是 0.5 * t * sin(t) (手动解决 here ),以及下面的 sympy: impor
我有兴趣优化一个函数,它是两个函数的卷积。主要问题是我得到的函数完全是规模化的,我不明白 np.convolve 到底做了什么。 我写了一个应该对两个高斯函数进行卷积的小脚本,但是生成的高斯函数比输入
虽然我已经找到了关于 scipy.ndimage.convolve 函数的文档并且我“几乎知道它做了什么”,但当我尝试计算结果数组时我无法遵循数学公式。让我们举个例子: a = np.array([[
简短摘要:如何快速计算两个数组的有限卷积? 问题描述 我正在尝试获得由定义的两个函数 f(x), g(x) 的有限卷积 为了实现这一点,我对函数进行了离散采样,并将它们转换为长度为 steps 的数组
我正在编写一个使用 numpy 中的卷积函数的移动平均函数,它应该等同于 ( weighted moving average)。当我的权重都相等时(如简单的算术平均值),它工作正常: data = n
我有以下两个信号: X0 = array([0., 0., 0., 0., 0., 1., 0., 0., 0., 0.]) rbf_kernel = array([2.40369476e-04, 4
我正在使用 Mathematica 7。 我有一个插值函数,这是一个例子: pressures = WeatherData["Chicago", "Pressure", {2010, 8}] //
scipy.ndimage.filters 中的几个函数, 包括 scipy.ndimage.filters.convolve ,有一个“模式”参数,定义它在边界处的行为方式。 mode='const
我已阅读之前有关 theano conv1d 问题的回复,但我似乎无法使其工作: x = np.arange(50) * 1. y = np.random.normal((x+0.1)/5, 1, 5
我想学习/做的事情:如何使用脉冲响应在我的代码沙箱中设置一个简单的工作卷积器(混响)。我以为这类似于设置过滤器,但事情似乎大不相同。 我的尝试:与所有新技术一样,事物的变化速度很快,因此很难知道哪些实
这是我的代码: from scipy.ndimage import filters import numpy a = numpy.array([[2,43,42,123,461],[453,12,11
我注意到当我在 matlab 中使用 conv(a, b, 'same') 时,它会返回长度为 200 的 M,但是当我使用 numpy.convolve(a, b, 'same') 时它会返回N 的
我正在尝试使用 scipy 的 ndimage.convolve 函数对 3 维图像(RGB、宽度、高度)执行卷积。 看这里: 很明显,对于任何输入,每个内核/过滤器都应该只有 NxN 的输出,深度严
我是一名优秀的程序员,十分优秀!