我试图根据Bartlett方法的描述在Python中实现周期图,并将结果与Scipy的结果进行比较,通过设置overlap=0,使用window='boxcar'(矩形窗口)。然而,我的结果存在一定的偏差。有人能指出我的代码有什么问题吗?谢谢
import numpy as np
import matplotlib.pyplot as plt
from scipy import signal
def my_bartlett_periodogram(x, fs, nperseg, nfft):
nsegments = len(x) // nperseg
psd = np.zeros(nfft)
for segment in x.reshape(nsegments, nperseg):
psd += np.abs(np.fft.fft(segment))**2 / nfft
psd[0] = 0 # important!!
psd /= nsegments
psd = psd[0 : nfft//2]
freq = np.linspace(0, fs/2, nfft//2)
return freq, psd
def plot_output(t, x, f1, psd1, f2, psd2):
fig, axs = plt.subplots(3,1, figsize=(12,15))
axs[0].plot(t[:300], x[:300])
axs[1].plot(freq1, psd1)
axs[2].plot(freq2, psd2)
axs[0].set_title('Input (len=8192, fs=512)') …Run Code Online (Sandbox Code Playgroud) 我正在使用sklearn.metrics.confusion_matrix(y_actual, y_predict)提取tn,fp,fn,tp,并且大多数时候它完美地工作.
from sklearn.metrics import confusion_matrix
y_actual, y_predict = [1,1,1,1], [0,0,0,0]
tn, fp, fn, tp = confusion_matrix(y_actual, y_predict).ravel()
>>> [0 0 4 0] # ok
y_actual, y_predict = [1,1,1,1],[0,1,0,1]
tn, fp, fn, tp = confusion_matrix(y_actual, y_predict).ravel()
>>> [0 0 2 2] # ok
Run Code Online (Sandbox Code Playgroud)
但是,在某些情况下,confusion_matrix()并不总是返回这些信息,我会得到ValueError,如下所示.
from sklearn.metrics import confusion_matrix
y_actual, y_predict = [0,0,0,0],[0,0,0,0]
tn, fp, fn, tp = confusion_matrix(y_actual, y_predict).ravel()
>>> [4] # ValueError: not enough values to unpack (expected 4, got 1)
y_actual, y_predict = [1,1,1,1],[1,1,1,1]
tn, fp, …Run Code Online (Sandbox Code Playgroud) 如何绘制次要网格为 1、主要网格为 10、xticklabels 增量为20 个单位的图表?
这是我的示例代码和输出,xticklabels 每 10 个单位递增:
plt.figure(figsize=(10, 10))
ax = plt.gca()
major_ticks = np.arange(0, 60, 10)
minor_ticks = np.arange(0, 60, 1)
ax.set_xticks(major_ticks)
ax.set_xticks(minor_ticks, minor=True)
ax.set_yticks(major_ticks)
ax.set_yticks(minor_ticks, minor=True)
ax.grid(which='major')
ax.grid(which='minor', alpha=0.5)
ax.set_aspect('equal')
Run Code Online (Sandbox Code Playgroud)
但后来我想以 20 而不是 10 的增量显示 xticklabels 和 yticklabels,如下所示:
知道如何实现这一点吗?谢谢