小编dew*_*rn1的帖子

ggplot2小提琴情节:只填充中央95%?

ggplot2可以创建一个非常有吸引力的填充小提琴情节:

ggplot() + geom_violin(data=data.frame(x=1, y=rnorm(10 ^ 5)), 
    aes(x=x, y=y), fill='gray90', color='black') + 
    theme_classic()
Run Code Online (Sandbox Code Playgroud)

如果可能的话,我想将填充限制在95%的分布中心,保持轮廓完整.有没有人有关于如何做到这一点的建议?

r ggplot2

7
推荐指数
1
解决办法
738
查看次数

绘制一个具有特定像素数的圆

我正在开展一个项目,要求我准确地控制用于绘制(粗略)圆形刺激的像素数量,尽管Bresenham的算法很棒,但它们并没有绘制任意区域的圆圈(据我所知) .我已经尝试过在绘制所需区域时中断Bresenham算法的脚本,但结果肯定是命中注定.有没有人知道使用给定数量的像素绘制"最佳"圆(有点主观,我知道)的方法?非常感谢!

language-agnostic algorithm plot geometry

5
推荐指数
2
解决办法
7157
查看次数

加速 Python 中的一对多相关计算

我想在 Python 中计算向量与数组的每一行之间的 Pearson 相关系数(假设为 numpy 和或 scipy)。由于实际数据数组的大小和内存限制,将无法使用标准相关矩阵计算函数。这是我的幼稚实现:

import numpy as np
import scipy.stats as sps

np.random.seed(0)

def correlateOneWithMany(one, many):
    """Return Pearson's correlation coef of 'one' with each row of 'many'."""
    pr_arr = np.zeros((many.shape[0], 2), dtype=np.float64)
    pr_arr[:] = np.nan
    for row_num in np.arange(many.shape[0]):
        pr_arr[row_num, :] = sps.pearsonr(one, many[row_num, :])
    return pr_arr

obs, varz = 10 ** 3, 500
X = np.random.uniform(size=(obs, varz))

pr = correlateOneWithMany(X[0, :], X)

%timeit correlateOneWithMany(X[0, :], X)
# 10 loops, best of 3: 38.9 ms per …
Run Code Online (Sandbox Code Playgroud)

python statistics numpy scipy python-2.7

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

返回一个实值,相位扰乱的时间序列

我正在尝试使用Scipy/Numpy在Python中实现时间序列的"相位加扰".简而言之,我想:

  1. 拿一个时间序列.
  2. 使用FFT测量频域中的功率和相位.
  3. 扰乱现有阶段,随机重新分配阶段到频率.
  4. 使用IFFT返回具有加扰相位的实值(即,非复数)时间序列,使得时间序列的功率谱保持不变,但是时间序列的点与原始点不同.

我有一个表面上似乎有用的脚本(见图),但我怀疑我错过了一些重要的东西.特别是,我返回的阶段扰码时间序列具有复值条目而不是实值条目,我不知道该怎么做.如果任何信号处理人员可以权衡并教育我,我会非常感激.

这是适用于Jupyter Notebook的示例脚本:

%matplotlib inline
import matplotlib
import numpy as np
import matplotlib.pyplot as plt
from scipy.fftpack import fft, ifft

def phaseScrambleTS(ts):
    """Returns a TS: original TS power is preserved; TS phase is shuffled."""
    fs = fft(ts)
    pow_fs = np.abs(fs) ** 2.
    phase_fs = np.angle(fs)
    phase_fsr = phase_fs.copy()
    np.random.shuffle(phase_fsr)
    fsrp = np.sqrt(pow_fs) * (np.cos(phase_fsr) + 1j * np.sin(phase_fsr))
    tsr = ifft(fsrp)
    return tsr

ts = np.array([0.02, -1.04, 2.50, 2.21, 1.37, -0.05, 0.06, -0.22, -0.48, -0.31, …
Run Code Online (Sandbox Code Playgroud)

python signal-processing numpy fft scipy

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