相关疑难解决方法(0)

从Python中的数据点查找移动平均值

我再次使用Python,我找到了一本带有例子的简洁书.其中一个例子是绘制一些数据.我有一个包含两列的.txt文件,我有数据.我把数据绘制得很好,但是在练习中它说:进一步修改程序以计算和绘制数据的运行平均值,定义如下:

$Y_k=\frac{1}{2r}\sum_{m=-r}^r y_{k+m}$
Run Code Online (Sandbox Code Playgroud)

其中r=5在此情况下(以及y_k在数据文件中的第二列).让程序在同一图表上绘制原始数据和运行平均值.

到目前为止我有这个:

from pylab import plot, ylim, xlim, show, xlabel, ylabel
from numpy import linspace, loadtxt

data = loadtxt("sunspots.txt", float)
r=5.0

x = data[:,0]
y = data[:,1]

plot(x,y)
xlim(0,1000)
xlabel("Months since Jan 1749.")
ylabel("No. of Sun spots")
show()
Run Code Online (Sandbox Code Playgroud)

那么如何计算总和呢?在Mathematica中它很简单,因为它是符号操作(例如Sum [i,{i,0,10}]),但是如何计算python中的sum,它取数据中的每十个点并对其进行平均,直到结束分数?

我看了看这本书,却发现没有什么可以解释这个:


heltonbiker的代码诀窍^^:D

from __future__ import division
from pylab import plot, ylim, xlim, show, xlabel, ylabel, grid
from numpy import linspace, loadtxt, ones, convolve
import numpy as numpy

data = loadtxt("sunspots.txt", float)

def movingaverage(interval, …
Run Code Online (Sandbox Code Playgroud)

python plot average sum

41
推荐指数
3
解决办法
8万
查看次数

如何消除由 librosa griffin lim 引入的失真?

我正在做:

import librosa


D = librosa.stft(samples, n_fft=nperseg, 
                 hop_length=overlap, win_length=nperseg,
                 window=scipy.signal.windows.hamming)

spect, _ = librosa.magphase(D)

audio_signal = librosa.griffinlim(spect, n_iter=1024, 
                                  win_length=nperseg, hop_length=overlap, 
                                  window=signal.windows.hamming)
print(audio_signal, audio_signal.shape)
sf.write('test.wav', audio_signal, sample_rate)
Run Code Online (Sandbox Code Playgroud)

并且它在重建的音频信号中引入了明显的失真。我能做些什么来改善它?

python librosa soundfile

32
推荐指数
1
解决办法
740
查看次数

如何在python中平滑曲线

我有一个熵曲线(1d numpy数组),但这条曲线有很多噪音.我想用平滑删除噪音.

这是我的曲线图: 曲线和噪音

我试图解决这个问题,使用Kaiser-Bessel过滤器制作卷积产品:

gaussian_curve = window_kaiser(windowLength, beta=20)  # kaiser filter
gaussian_curve = gaussian_curve / sum(gaussian_curve)

for i in range(0, windows_number):
     start = (i * step) + 1
     end = (i * step) + windowLength
     convolution[i] = (np.convolve(entropy[start:end + 1], gaussian_curve, mode='valid'))
     entropy[i] = convolution[i][0]
Run Code Online (Sandbox Code Playgroud)

但此代码返回此错误:

File "/usr/lib/python2.7/dist-packages/numpy/core/numeric.py", line 822, in convolve
    raise ValueError('v cannot be empty')
ValueError: v cannot be empty
Run Code Online (Sandbox Code Playgroud)

具有'valid'模式的numpy.convolve运算符返回重叠中的中心元素,但在这种情况下,返回一个空元素.

是否有一种简单的方法来应用平滑?

谢谢!

python signal-processing numpy gaussian smoothing

10
推荐指数
1
解决办法
2万
查看次数

Python平滑数据

我有一个我想要平滑的数据集.我有两个不均匀间隔的变量y和x.y是因变量.但是,我不知道x与y有什么关系.

我读了所有关于插值的内容,但插值要求我知道将x与y相关的公式.我还查看了其他平滑函数,但这些函数会导致起点和终点出现问题.

有谁知道如何: - 获得一个将x与y相关联的公式 - 平滑数据点而不会弄乱端点

我的数据如下:

import matplotlib.pyplot as plt

x = [0.0, 2.4343476531707129, 3.606959459205791, 3.9619355597454664, 4.3503348239356558, 4.6651002761894667, 4.9360228447915109, 5.1839565805565826, 5.5418099660513596, 5.7321342976055165,5.9841050994671106, 6.0478709402949216, 6.3525180590674513, 6.5181245134579893, 6.6627517592933767, 6.9217136972938444,7.103121623408132, 7.2477706136047413, 7.4502723880766748, 7.6174503055171137, 7.7451599936721376, 7.9813193157205191, 8.115292520850506,8.3312689109403202, 8.5648187916197998, 8.6728478860287623, 8.9629327234023926, 8.9974662723308612, 9.1532523634107257, 9.369326186780814, 9.5143785756455479, 9.5732694726297893, 9.8274813411538613, 10.088572892445802, 10.097305715988142, 10.229215999264703, 10.408589988296546, 10.525354763219688, 10.574678982757082, 10.885039893236041, 11.076574204171795, 11.091570626351352, 11.223859812944436, 11.391634940142225, 11.747328449715521, 11.799186895037078, 11.947711314893802, 12.240901223703657, 12.50151825769724, 12.811712563174883, 13.153496854155087, 13.978408296586579, 17.0, 25.0]
y = [0.0, 4.0, 6.0, 18.0, 30.0, 42.0, 54.0, 66.0, 78.0, 90.0, 102.0, 114.0, 126.0, …
Run Code Online (Sandbox Code Playgroud)

python smoothing

5
推荐指数
1
解决办法
3万
查看次数

如何使此matplotlib图的噪声较小?

如何在不考虑每个单独值的情况下用平滑,连续的线绘制以下噪声数据?我只想以更好的方式显示行为,而不关心嘈杂和极端的值。这是我正在使用的代码:

import numpy
import sys
import matplotlib.pyplot as plt
from scipy.interpolate import spline

dataset = numpy.genfromtxt(fname='data', delimiter=",") 

dic = {}

for d in dataset:
    dic[d[0]] = d[1] 

plt.plot(range(len(dic)), dic.values(),linestyle='-', linewidth=2)

plt.savefig('plot.png')
plt.show()
Run Code Online (Sandbox Code Playgroud)

情节

python plot matplotlib

3
推荐指数
1
解决办法
2641
查看次数

通过使用NumPy/SciPy检测向量的局部最大值来提取直方图模式

有没有办法让NumPy/SciPy` 在提取局部最大值时只保留直方图模式(在下图中显示为蓝点)?
直方图

这些最大值是使用提取的scipy.signal.argrelmax,但我只需要获取两个模式值并忽略检测到的其余最大值:

# calculate dB positive image
img_db = 10 * np.log10(img)
img_db_pos = img_db + abs(np.min(img_db))
data = img_db_pos.flatten() + 1

# data histogram
n, bins = np.histogram(data, 100, normed=True)

# trim data
x = np.linspace(np.min(data), np.max(data), num=100)

# find index of minimum between two modes
ind_max = argrelmax(n)
x_max = x[ind_max]
y_max = n[ind_max]

# plot
plt.hist(data, bins=100, normed=True, color='y')
plt.scatter(x_max, y_max, color='b')
plt.show()
Run Code Online (Sandbox Code Playgroud)

注意:

我已设法使用此平滑滤镜来获得与直方图匹配的曲线(但我没有曲线方程).

python numpy scipy

3
推荐指数
2
解决办法
2794
查看次数

MATLAB在NumPy/Python中的平滑实现(n点移动平均)

smooth默认情况下,Matlab的功能使用5点移动平均值来平滑数据.在python中做同样的事情的最佳方法是什么?例如,如果这是我的数据

0
0.823529411764706
0.852941176470588
0.705882352941177
0.705882352941177
0.676470588235294
0.676470588235294
0.500000000000000
0.558823529411765
0.647058823529412
0.705882352941177
0.705882352941177
0.617647058823529
0.705882352941177
0.735294117647059
0.735294117647059
0.588235294117647
0.588235294117647
1
0.647058823529412
0.705882352941177
0.764705882352941
0.823529411764706
0.647058823529412
0.735294117647059
0.794117647058824
0.794117647058824
0.705882352941177
0.676470588235294
0.794117647058824
0.852941176470588
0.735294117647059
0.647058823529412
0.647058823529412
0.676470588235294
0.676470588235294
0.529411764705882
0.676470588235294
0.794117647058824
0.882352941176471
0.735294117647059
0.852941176470588
0.823529411764706
0.764705882352941
0.558823529411765
0.588235294117647
0.617647058823529
0.647058823529412
0.588235294117647
0.617647058823529
0.647058823529412
0.794117647058824
0.823529411764706
0.647058823529412
0.617647058823529
0.647058823529412
0.676470588235294
0.764705882352941
0.676470588235294
0.647058823529412
0.705882352941177
0.764705882352941
0.705882352941177
0.500000000000000
0.529411764705882
0.529411764705882
0.647058823529412
0.676470588235294
0.588235294117647
0.735294117647059
0.794117647058824
0.852941176470588
0.764705882352941
Run Code Online (Sandbox Code Playgroud)

平滑的数据应该是

0
0.558823529411765
0.617647058823530
0.752941176470588 …
Run Code Online (Sandbox Code Playgroud)

python matlab numpy smooth scipy

2
推荐指数
1
解决办法
2397
查看次数