Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/341.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在Python中使用Numpy或Scipy放大类似的值_Python_Numpy_Matplotlib_Scipy - Fatal编程技术网

在Python中使用Numpy或Scipy放大类似的值

在Python中使用Numpy或Scipy放大类似的值,python,numpy,matplotlib,scipy,Python,Numpy,Matplotlib,Scipy,我有一个使用Matplotlib绘制的numpy数组。我的问题是这些值非常相似,所以当它被绘制成图形时,可读性是不存在的 0,0,0,0,0,0,0,0,46.29821447,49.49781571,49.83072758,50.89081787,98.49113721,98.5522082,99.29547499,99.91765345,99.93779431,99.95351796,99.98066963,99.99294867,100 注意一些值是如何聚集的,我的问题是是否有任何方法可

我有一个使用Matplotlib绘制的numpy数组。我的问题是这些值非常相似,所以当它被绘制成图形时,可读性是不存在的

0,0,0,0,0,0,0,0,46.29821447,49.49781571,49.83072758,50.89081787,98.49113721,98.5522082,99.29547499,99.91765345,99.93779431,99.95351796,99.98066963,99.99294867,100
注意一些值是如何聚集的,我的问题是是否有任何方法可以迭代numpy数组并确定那些紧密的聚集,然后应用放大来分离它们(不包括零值)?当我在Matplotlib中绘制它们时,这就是图形

x = np.array([1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21])
y = np.array([0,0,0,0,0,0,0,0,46.29821447,49.49781571,49.83072758,50.89081787,98.49113721,98.5522082,99.29547499,99.91765345,99.93779431,99.95351796,99.98066963,99.99294867,100])
my_xticks = ['<2.5 uS', '<5 uS', '<10 uS', '<20 uS', '<30 uS', '<40 uS', '<50 uS', '<60 uS', '<70 uS', '<80 uS', '<90 uS', '<100 uS', '<200 uS', '<250 uS', '<350 uS', '<500 uS', '<1 mS', '<2 uS', '<5 mS', '<10 mS', '<1 S']
my_yticks = [0,20,40,60,80,90,95,98,99,99.7,99.9,99.97,99.99,99.997,99.999,99.9997,99.9999,99.99999,99.999999]
plt.xticks(x, my_xticks)
plt.gca().axes.get_yaxis().set_ticks([0,20,40,60,80,90,95,98,99,99.7,99.9,99.97,99.99,99.997,99.999,99.9997,99.9999,99.99999,99.999999])
plt.yticks(y, my_yticks)
plt.plot(x,y, '-r')
plt.plot(x,y, '.')
plt.ylim(bottom=-5, top=105)
plt.grid(axis='y')
plt.xlabel('Latency in Micro Milli Second')
plt.ylabel('Probability in %')
plt.title('Probability Distribution')
plt.show()
x=np.数组([1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21])
y=np.数组([0,0,0,0,0,0,0,46.29821447,49.49781571,49.83072758,50.89081787,98.49113721,98.5522082,99.29547499,99.91765345,99.93779431,99.95351796,99.98066963,99.99294867100])

我的_xticks=以这样的方式绘制数据,以便准确地表示分位数之间的细微差异和大尺度跳跃,这几乎是不可能的。你可以随意使用不连续的y轴,但最终你不得不应用各种非线性,以便将数据拟合到轴上n解读情节变得非常困难

是否有一些非常重要的原因让你必须画出这个,而不是这个

以下是数据的PDF在半对数轴上的实际外观:

import numpy as np
from matplotlib import pyplot as plt


x = np.array([2.5E-06, 5.0E-06, 1.0E-05, 2.0E-05, 3.0E-05, 4.0E-05, 5.0E-05,
              6.0E-05, 7.0E-05, 8.0E-05, 9.0E-05, 1.0E-04, 2.0E-04, 2.5E-04,
              3.5E-04, 5.0E-04, 1.0E-03, 2.0E-03, 5.0E-03, 1.0E-02, 1.0E+00])

y = np.array([ 0.        ,  0.        ,  0.        ,  0.        ,
               0.        ,  0.        ,  0.        ,  0.        ,
              46.29821447, 49.49781571, 49.83072758, 50.89081787,
              98.49113721, 98.5522082 , 99.29547499, 99.91765345,
              99.93779431, 99.95351796, 99.98066963, 99.99294867,  100.]) / 100.

# we can get a rough estimate the PDF from the derivative of the CDF using
# second-order central differences (it would be better to evaluate the PDF
# directly if you can)
dx = np.gradient(x)
dy = np.gradient(y)

fig, ax = plt.subplots(1, 1)
ax.set_xscale('log')
ax.fill_between(x, 0, (dy / dx), alpha=0.5)

ax.set_ylabel('Probability density')
ax.set_xlabel('S')

在我看来,PDF对正在发生的事情给出了更清晰的直觉。基本上,对于接近~70uS的值,有一个高概率密度,在~100uS左右有一个较小的峰值,然后在其他地方几乎为零概率

正如你所看到的,PDF中的这些峰值非常尖锐,这意味着当你计算CDF(积分)时,你会得到很多非常相似的分位数,然后是与大部分概率密度相对应的巨大跳跃


CDF中的跳跃(对应于PDF中的峰值)可能是概率分布最显著的特征,因为它们反映了最有可能采样的值。

什么是“应用放大”另外,你能发布你的代码吗?你可以考虑用断裂的y轴绘制CDF在单独的部分中……它是如何在对数图上的?@ CpLeWIS他问了一个紧密相关的问题,看看我的日志日志的答案,PopTI不理解你所说的“动态数据”是什么意思。。CDF的哪些特定功能对您来说最重要?例如,您可能对显示整体形状更感兴趣,或者您可能希望精确区分附近的特定分位数。从各个角度来看,绘制此CDF并不是一种单一的方法。
import numpy as np
from matplotlib import pyplot as plt


x = np.array([2.5E-06, 5.0E-06, 1.0E-05, 2.0E-05, 3.0E-05, 4.0E-05, 5.0E-05,
              6.0E-05, 7.0E-05, 8.0E-05, 9.0E-05, 1.0E-04, 2.0E-04, 2.5E-04,
              3.5E-04, 5.0E-04, 1.0E-03, 2.0E-03, 5.0E-03, 1.0E-02, 1.0E+00])

y = np.array([ 0.        ,  0.        ,  0.        ,  0.        ,
               0.        ,  0.        ,  0.        ,  0.        ,
              46.29821447, 49.49781571, 49.83072758, 50.89081787,
              98.49113721, 98.5522082 , 99.29547499, 99.91765345,
              99.93779431, 99.95351796, 99.98066963, 99.99294867,  100.]) / 100.

# we can get a rough estimate the PDF from the derivative of the CDF using
# second-order central differences (it would be better to evaluate the PDF
# directly if you can)
dx = np.gradient(x)
dy = np.gradient(y)

fig, ax = plt.subplots(1, 1)
ax.set_xscale('log')
ax.fill_between(x, 0, (dy / dx), alpha=0.5)

ax.set_ylabel('Probability density')
ax.set_xlabel('S')