1
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)

npnumpy包裹。的长度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

应该做什么 ?

4

1 回答 1

2

要创建final与 具有相同形状和 dtype 的空数组content,请使用:

final = np.empty_like(content)

关于TypeError: integer argument expected, got float

虽然 convolve1d 的文档字符串说

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')
于 2013-07-03T08:50:22.310 回答