from scipy import ndimage
import numpy as np
with open("Data.dat", "r+") as f:
content = f.readlines()
content = [s.strip() for s in content]
content = np.asarray(content)
weights = np.array([1, 2, 4, 2, 1])
final = np.empty(content)
ndimage.filters.convolve1d(content, weights, -1, final, 'reflect', 0.0, 0.0)
此处np
是numpy
个包。 content
的长度为750,因此尝试使用np.empty()初始化输出数组的形状,因为我不想要任何值。
但是当我跑步时,我得到了这个错误:
Traceback (most recent call last):
File "C:\Users\Animesh\Desktop\Smoothing.py", line 18, in <module>
final = np.empty(content)
ValueError: sequence too large; must be smaller than 32
应该做什么?
答案 0 :(得分:2)
要使final
为与content
相同形状和dtype的空数组,请使用:
final = np.empty_like(content)
关于TypeError: integer argument expected, got float
:
虽然convolve1d的docstring说
origin : scalar, optional
The `origin` parameter controls the placement of the filter.
Default 0.0.
origin
参数必须是整数,而不是浮点数。
这是一个没有错误运行的示例:
import scipy.ndimage as ndimage
import numpy as np
# content = np.genfromtxt('Data.dat')
content = np.asarray(np.arange(750))
weights = np.array([1, 2, 4, 2, 1])
final = np.empty_like(content)
ndimage.convolve1d(content, weights, axis=-1, output=final, mode='reflect', cval=0.0,
origin=0
# origin=0.0 # This raises TypeError
)
print(final)
取消注释origin=0.0
会引发TypeError。
关于
with open("Data.dat", "r+") as f:
content = f.readlines()
content = [s.strip() for s in content]
content = np.asarray(content)
这使content
成为一个字符串数组。由于你正在进行卷积,你必须要一组数字。所以用
content = np.genfromtxt('Data.dat')