以下代码使用scipy.signal.spectrogram或生成频谱图matplotlib.pyplot.specgram。
specgram但是,该功能的色彩对比度相当低。有办法增加吗?
import numpy as np
from scipy import signal
import matplotlib.pyplot as plt
# Generate data
fs = 10e3
N = 5e4
amp = 4 * np.sqrt(2)
noise_power = 0.01 * fs / 2
time = np.arange(N) / float(fs)
mod = 800*np.cos(2*np.pi*0.2*time)
carrier = amp * np.sin(2*np.pi*time + mod)
noise = np.random.normal(scale=np.sqrt(noise_power), size=time.shape)
noise *= np.exp(-time/5)
x = carrier + noise
Run Code Online (Sandbox Code Playgroud)
使用matplotlib.pyplot.specgram将产生以下结果:
Pxx, freqs, bins, im = plt.specgram(x, NFFT=1028, Fs=fs)
x1, x2, …Run Code Online (Sandbox Code Playgroud) 使用 R 的大家好,
将包含数千个数据点的多个绘图放入单个 PDF 文件中时,该文件可能会变得很大并且需要很长时间才能打开。
下面的文章描述了 Matplotlib 中完全相同的问题,以及一个很好的解决方案: Matplotlib:带有光栅化图的多页 PDF 特别好的一点是,它只光栅化点而不光栅化标签。 http://www.astrobetter.com/blog/2014/01/17/slim-down-your-bloated-graphics/包含一个很好的例子。
我现在正在 R 中寻找类似的解决方案。
有两种可能性可以生成要在Racket中的for循环中迭代的数字序列:
(for ([i (range 1 5)])
(display i))
Run Code Online (Sandbox Code Playgroud)
和
(for ([i (in-range 1 5)])
(display i))
Run Code Online (Sandbox Code Playgroud)
range两者都有效并且in-range似乎是等效的,但是https://docs.racket-lang.org/reference/sequences.html说:
“当范围内的应用程序直接出现在 for 子句中时,它可以为数字迭代提供更好的性能。”
与 相比,这也成立吗range?
scipy.signal.spectrogram计算信号的频谱图,但我看不到增加频谱图频率分辨率的选项.鉴于文档中提供的代码,如何实现?
from scipy import signal
import numpy as np
import matplotlib.pyplot as plt
fs = 10e3
N = 1e5
amp = 2 * np.sqrt(2)
noise_power = 0.01 * fs / 2
time = np.arange(N) / float(fs)
mod = 500*np.cos(2*np.pi*0.25*time)
carrier = amp * np.sin(2*np.pi*3e3*time + mod)
noise = np.random.normal(scale=np.sqrt(noise_power), size=time.shape)
noise *= np.exp(-time/5)
x = carrier + noise
f, t, Sxx = signal.spectrogram(x, fs)
plt.pcolormesh(t, f[0:10], Sxx[0:10,])
plt.ylabel('Frequency [Hz]')
plt.xlabel('Time [sec]')
plt.show()
Run Code Online (Sandbox Code Playgroud) 给定两个布尔分类因子,我如何将它们的组合作为第三类?
> my_data <- data.frame(a = c(0, 0, 1, 1, 1),
b = c(0, 1, 0, 1, 1))
> my_data
a b
1 0 0
2 0 1
3 1 0
4 1 1
5 1 1
Run Code Online (Sandbox Code Playgroud)
我想添加一个新类别,结合使用a和b,以便:
> my_data
a b c
1 0 0 1
2 0 1 2
3 1 0 3
4 1 1 4
5 1 1 4
Run Code Online (Sandbox Code Playgroud)
我不想懒惰,为自己考虑一下:
my_data$c <- as.numeric(as.factor(my_data$a + 1 + (my_data$b + 1) * 2))
Run Code Online (Sandbox Code Playgroud)
这很接近,但我发现它并不特别优雅.因此,可以理解基础R中的任何更好的解决方案.肯定还有喜欢reshape2提供类似功能的软件包.
r ×2
scipy ×2
for-loop ×1
graphics ×1
matplotlib ×1
plot ×1
python ×1
racket ×1
rasterizing ×1
sequence ×1
spectrogram ×1
spectrum ×1