该偏斜度是衡量一个数据集和对称性的参数峰度来衡量多么沉重的尾部比正态分布,例如参见这里.
scipy.stats提供了一种计算这两个量的简便方法,参见scipy.stats.kurtosis和scipy.stats.skew.
根据我的理解,使用刚才提到的函数,正态分布的偏度和峰度都应为0.但是,我的代码并非如此:
import numpy as np
from scipy.stats import kurtosis
from scipy.stats import skew
x = np.linspace( -5, 5, 1000 )
y = 1./(np.sqrt(2.*np.pi)) * np.exp( -.5*(x)**2 ) # normal distribution
print( 'excess kurtosis of normal distribution (should be 0): {}'.format( kurtosis(y) ))
print( 'skewness of normal distribution (should be 0): {}'.format( skew(y) ))
Run Code Online (Sandbox Code Playgroud)
输出是:
正常分布的过度峰度(应为0): - 0.307393087742
正态分布的偏度(应为0):1.11082371392
我究竟做错了什么 ?
我正在使用的版本是
python: 2.7.6
scipy : …Run Code Online (Sandbox Code Playgroud) 我正在做一个截屏视频,记录屏幕上发生的情况以及来自外部 USB 麦克风的同步音频评论。我正在使用以下命令:
ffmpeg -f x11grab -r 25 -s 1280x720 -i :0.0+320,236 -thread_queue_size 1024 -f alsa -thread_queue_size 1024 -i hw:1 -vcodec huffyuv screencast.mkv
Run Code Online (Sandbox Code Playgroud)
我认为使用如此高的值thread_queue_size应该让我处于安全站点,以避免buffer xrun我以前遇到的任何错误。然而,情况似乎并非如此。这是录制过程中出现的警告消息:
[x11grab @ 0x55ffe44e6a40] Thread message queue blocking; consider raising the thread_queue_size option (current value: 8)
[alsa @ 0x55ffe44efe80] Thread message queue blocking; consider raising the thread_queue_size option (current value: 1024)
[alsa @ 0x55ffe44efe80] ALSA buffer xrun.B time=00:07:35.96 bitrate=203382.4kbits/s speed=0.994x
[alsa @ 0x55ffe44efe80] ALSA buffer xrun.B time=00:20:18.76 bitrate=210805.7kbits/s speed=0.998x
Run Code Online (Sandbox Code Playgroud)
有两件事我不明白:
x11grab …我有一个对数正态的分布式样本集.我可以使用具有线性或对数x轴的自然图来可视化样本.我可以对直方图进行拟合以获得PDF,然后将其缩放到具有线性x轴的图中的histrogram,另请参见此前发布的问题.
但是,我无法使用对数x轴将PDF正确绘制到绘图中.
不幸的是,将PDF区域缩放到直方图不仅存在问题,而且PDF也向左移动,如下图所示.
我现在的问题是,我在这里做错了什么?如本答案所示,使用CDF绘制预期的直方图是有效的.我想知道我在这段代码中做错了什么,因为在我的理解中它也应该工作.
这是python代码(我很抱歉它很长但我想发布一个"完整的独立版本"):
import numpy as np
import matplotlib.pyplot as plt
import scipy.stats
# generate log-normal distributed set of samples
np.random.seed(42)
samples = np.random.lognormal( mean=1, sigma=.4, size=10000 )
# make a fit to the samples
shape, loc, scale = scipy.stats.lognorm.fit( samples, floc=0 )
x_fit = np.linspace( samples.min(), samples.max(), 100 )
samples_fit = scipy.stats.lognorm.pdf( x_fit, shape, loc=loc, scale=scale )
# plot a histrogram with linear x-axis
plt.subplot( 1, 2, 1 )
N_bins = …Run Code Online (Sandbox Code Playgroud) 我正在编写一个使用OpenMP进行矩阵乘法的程序,为了方便缓存,实现乘法A x B(转置)行X行而不是经典的A x B行x列,以获得更好的缓存效率.这样做我遇到了一个有趣的事实,对我来说是不合逻辑的:如果在这段代码中我并行化extern循环,程序比我将OpenMP指令放在最内层循环中慢,在我的计算机中,时间是10.9对8.1秒.
//A and B are double* allocated with malloc, Nu is the lenght of the matrixes
//which are square
//#pragma omp parallel for
for (i=0; i<Nu; i++){
for (j=0; j<Nu; j++){
*(C+(i*Nu+j)) = 0.;
#pragma omp parallel for
for(k=0;k<Nu ;k++){
*(C+(i*Nu+j))+=*(A+(i*Nu+k)) * *(B+(j*Nu+k));//C(i,j)=sum(over k) A(i,k)*B(k,j)
}
}
}
Run Code Online (Sandbox Code Playgroud) parallel-processing performance loops openmp matrix-multiplication
我有以下简单的python代码:
import numpy as np
import matplotlib.pyplot as plt
plt.rc( 'font', size=20, family="Times" ) # use a font with serifs
# the following line triggers the problem
plt.rc( 'text', usetex=True ) # activate LaTeX text rendering
fig = plt.figure( figsize=(8,6) ) # (width,height) in inches
ax1 = fig.add_subplot( 1, 1, 1 ) # rows cols plotnumber
ax1.plot( np.linspace(1,10,10), np.linspace(1,10,10)**2 )
ax1.set_xlabel( r'\textit{x} in a.u.' )
ax1.set_ylabel( r'\textit{y} in a.u.' )
plt.show()
Run Code Online (Sandbox Code Playgroud)
如您所见,与轴标签相比,刻度标签的字体太薄(或者轴标签太厚)。我发现这是由于激活了 LaTeX 文本渲染(请参阅代码中的注释),但我不知道如何更改它,因为我不想关闭 LaTeX 文本渲染。
知道为什么字体厚度(厚度的复数是什么?)不一致以及如何更改?
更新 1 …
我想在我用曲面图绘制的圆环内画一条线。该线不应该在环面内可见 - 就像环面的内侧一样,只能在环面的“末端”看到(我切断了环面的一半)。然而,我绘制的线随处可见(如您在图中所见)。
我使用了以下代码:
import numpy as np
import matplotlib.pyplot as plt
from mpl_toolkits.mplot3d import Axes3D
# theta: poloidal angle | phi: toroidal angle
# note: only plot half a torus, thus phi=0...pi
theta = np.linspace(0, 2.*np.pi, 200)
phi = np.linspace(0, 1.*np.pi, 200)
theta, phi = np.meshgrid(theta, phi)
# major and minor radius
R0, a = 3., 1.
# torus parametrization
x_torus = (R0 + a*np.cos(theta)) * np.cos(phi)
y_torus = (R0 + a*np.cos(theta)) * np.sin(phi)
z_torus = a * np.sin(theta) …Run Code Online (Sandbox Code Playgroud) 让我们从 2 个二维数组开始:
import numpy as np
a = np.zeros( (3,4) )
b = np.zeros( (3,4) )
Run Code Online (Sandbox Code Playgroud)
现在让我们将它们组合成一个 3D 数组:
c = np.stack( (a,b) )
Run Code Online (Sandbox Code Playgroud)
到目前为止一切都很好,但是如何向 3D 数组添加额外的 2D 数组,以下不起作用:
np.stack( (c,a) )
Run Code Online (Sandbox Code Playgroud)
所以,我的问题是如何向 3D 数组添加一个附加层?(麻木版本1.12.1)
例如,我有一个字符串数组
import numpy as np
foo = np.array( [b'2014-04-05', b'2014-04-06', b'2014-04-07'] )
Run Code Online (Sandbox Code Playgroud)
为了检查数组的数据类型,我用
print( foo.dtype )
Run Code Online (Sandbox Code Playgroud)
这导致|S10. 显然,它由长度为 10 的字符串组成。我想将其转换为numpy'sdatetime64类型。
更准确地说,我想更改数组的数据类型,而无需遍历 for 循环并将其逐元素复制到新数组中(实际数组实际上非常大)。像我一样天真,我认为以下可能有效
[ np.datetime64(x) for x in foo ]
Run Code Online (Sandbox Code Playgroud)
剧透:它没有。打印数组的数据类型会产生与之前相同的输出(即|S10)。
是否有任何内存有效的方法来转换现有数组的数据类型,而无需将所有内容复制到新数组?
使用以下代码,我在 2D 笛卡尔网格上生成一个障碍物(稍后用作某些模拟的输入),将障碍物所在的区域定义为 1,其他地方都为 0。
我想使用等高线图来绘制它,但在生成二进制填充等高线图时遇到一些麻烦(附带问题:如何实现这一点?),因此决定将数组绘制为图像。
这是代码:
import numpy as np, matplotlib.pyplot as plt
# create spatial coordinates
N_x, N_y = 161, 161
x = np.linspace( .0, .80, N_x )
y = np.linspace( .0, .80, N_y )
# define obstacle
obst_diameter = .3
obst_center = (.4,.2)
# 2D array defining obstacle structure: 1=obstacle, 0=nothing
metal = np.zeros( (N_x, N_y), dtype=int )
for ii in range(N_x):
for jj in range(N_y):
if ( x[ii] >= (obst_center[0]-obst_diameter/2)
and x[ii] <= (obst_center[0]+obst_diameter/2)
and y[jj] …Run Code Online (Sandbox Code Playgroud) 我有一个对数正态分布式设置样本,并希望对它进行拟合.然后我想将样本的直方图和拟合的PDF绘制成一个图,我想用直方图的原始缩放.
我的问题:如何直接缩放PDF,使其在直方图中可见?
这是代码:
import numpy as np
import scipy.stats
# generate log-normal distributed set of samples
samples = np.random.lognormal( mean=1., sigma=.4, size=10000 )
# make a fit to the samples and generate the resulting PDF
shape, loc, scale = scipy.stats.lognorm.fit( samples, floc=0 )
x_fit = np.linspace( samples.min(), samples.max(), 100 )
samples_fit = scipy.stats.lognorm.pdf( x_fit, shape, loc=loc, scale=scale )
Run Code Online (Sandbox Code Playgroud)
我的问题是,如果有一个参数可以轻松地将PDF缩放到直方图(我没有找到一个,但这并不意味着太多......),这样PDF在中间的情节中可见?
我制作了以下图形:
我想添加一个额外的箭头,从“远程存储库”一直指向“工作副本”(标有“git pull”),并且我希望该箭头理想地首先稍微向下,然后向左,然后向上。
当我简单地在代码中添加一个箭头时,图形最终看起来像这样:
这是代码:
digraph G {
/* set direction of graph to be left-->right */
rankdir="LR";
/* make boxes instead of ellipses */
node [shape=box];
/* should enforce nodes to be horizontally aligned */
/* is not working, though... */
rank=same;
/* assign labels to nodes */
wc [label="working copy"];
id [label="index"];
lr [label="local repo"];
rr [label="remote repo"];
wc -> id [label="git add"];
id -> lr [label="git commit"];
lr -> rr [label="git push"];
rr -> wc [label="git pull"]; …Run Code Online (Sandbox Code Playgroud) 我“理解”如何将文本框链接到滑块(“理解”我的意思是如何使其工作):
from traitlets import link
a = widgets.FloatText(value=4.)
b = widgets.FloatSlider(min=3,max=7,step=0.23,value=4.)
display(a,b)
mylink = link((a, 'value'), (b, 'value'))
Run Code Online (Sandbox Code Playgroud)
这会导致如下结果:
但有什么办法,我怎么可以将一个下拉框,其值会list_items = ('case1', 'case2', 'case3')到FloatSlider,对应的值是如(3.4, 5.4, 6.7)?
我想用相同的注释注释2个点,并且我希望有2个箭头从该1个注释指向点.
我有以下代码:
import matplotlib.pyplot as plt
plt.plot( [1,2], [1,2], 'o' )
plt.xlim( [0,3] )
plt.ylim( [0,3] )
plt.annotate( 'Yet another annotation', xy=(1,1),
xytext=(1.5, .5),
arrowprops=dict( arrowstyle="->" )
)
plt.annotate( 'Yet another annotation', xy=(2,2),
xytext=(1.5, .5),
arrowprops=dict( arrowstyle="->" )
)
plt.show()
Run Code Online (Sandbox Code Playgroud)
正如您在结果图中所看到的,它可以工作(尽管它可能不是最优雅的方式,因为我在完全相同的位置有两个注释).
然而,我对此不满意:我想让箭头从完全相同的位置开始,目前它们似乎从注释的中心开始,我宁愿让它们从注释边缘的某个地方开始以便他们的起点连接起来.
我如何实现这一目标?
python ×10
matplotlib ×5
numpy ×4
scipy ×3
statistics ×3
arrays ×2
alsa ×1
dot ×1
ffmpeg ×1
graphviz ×1
ipywidgets ×1
loops ×1
openmp ×1
performance ×1
screencast ×1
tex ×1