将numpy.convolve应用于1-dim向量(具有单维度的二维数组)

时间:2017-12-24 03:53:22

标签: python numpy

我是numpy的新手。

我从Difference between numpy.array shape (R, 1) and (R,)

中了解了rank-1数组和1-dim vector之间的区别

我还被告知尽可能使用vector来进行机器学习任务而不是rank1数组。 (它来自https://www.coursera.org/learn/neural-networks-deep-learning/lecture/87MUx/a-note-on-python-numpy-vectors 4:35)

我正在尝试使用numpy.convolve而我看不到它需要1-dim向量。

有没有办法将1-dim向量传递给numpy.convolve,还是应该使用(N,)形状数组?

2 个答案:

答案 0 :(得分:0)

numpy.convolve的文档将输入描述为"一维数组。"

没有单独的"向量"在NumPy中,只有一维数组。除了第一个维度之外的所有维数都是1的高维数组通常也是可用的。

我认为您只需要尝试并查看。它应该按照你期望的方式工作。

答案 1 :(得分:0)

numpy.convolve的输入数组必须是一维的,形状为(N,)

要对包含多个维度的数组进行卷积,请使用scipy.signal.convolve

from scipy import signal
a = np.random.normal(size=(10, 1))
b = np.random.normal(size=(5, 1))
signal.convolve(a, b)

我会严肃地质疑这个建议的智慧(它是来自使用Matlab而不是使用NumPy的人吗?)但如果你必须在NumPy中使用它,那么squeeze()数组将删除单个维度之前卷积,然后reshape恢复该维度

a = np.random.normal(size=(10, 1))
b = np.random.normal(size=(5, 1))     
c = np.convolve(a.squeeze(), b.squeeze()).reshape(-1, 1)

NumPy看起来毫无意义地浪费时间,但谁知道,遵守机器学习法的好处也许是值得的。