小编nic*_*nic的帖子

matplotlib中累积分布函数的对数图

我有一个包含记录事件的文件.每个条目都有时间和延迟.我有兴趣绘制延迟的累积分布函数.我对尾部延迟最感兴趣所以我希望绘图具有对数y轴.我对以下百分位数的延迟感兴趣:第90,99,99.9,99.99和99.999.到目前为止,这是我的代码生成一个常规的CDF图:

# retrieve event times and latencies from the file
times, latencies = read_in_data_from_file('myfile.csv')
# compute the CDF
cdfx = numpy.sort(latencies)
cdfy = numpy.linspace(1 / len(latencies), 1.0, len(latencies))
# plot the CDF
plt.plot(cdfx, cdfy)
plt.show()
Run Code Online (Sandbox Code Playgroud)

常规CDF情节

我知道我希望情节看起来像什么,但我很难得到它.我希望它看起来像这样(我没有生成这个情节):

对数CDF图

使x轴对数很简单.y轴是给我带来问题的那个.使用set_yscale('log')不起作用,因为它想要使用10的幂.我真的希望y轴具有与该图相同的刻度标签.

如何将我的数据放入像这样的对数图中?

编辑:

如果我将yscale设置为'log',并将ylim设置为[0.1,1],我会得到以下图:

在此输入图像描述

问题是数据集上从0到1的典型对数刻度图将集中在接近零的值上.相反,我想专注于接近1的值.

python numpy logarithm matplotlib cdf

13
推荐指数
1
解决办法
3308
查看次数

如何让g ++警告未使用的成员变量

g ++为未使用的局部变量生成警告.是否可以让g ++警告未使用的类成员变量和/或全局变量?

class Obj {
 public:
  Obj(int a, int b) : num1(a), num2(b) {}
  int addA(int i) {
    return i + num1;
  }

 private:
  int num1;
  int num2;
};
Run Code Online (Sandbox Code Playgroud)

如何让g ++警告我num2未被使用?

更新:我目前正在编译:

g++ -Wall -Wextra -pedantic *.cc -o myprogram 
Run Code Online (Sandbox Code Playgroud)

c++ g++

12
推荐指数
3
解决办法
2050
查看次数

Python3写gzip文件 - memoryview:需要一个类似字节的对象,而不是'str'

我想写一个文件.根据文件的名称,这可能会也可能不会被gzip模块压缩.这是我的代码:

import gzip
filename = 'output.gz'
opener = gzip.open if filename.endswith('.gz') else open
with opener(filename, 'wb') as fd:
    print('blah blah blah'.encode(), file=fd)
Run Code Online (Sandbox Code Playgroud)

我正在以二进制模式打开可写文件并编码我要编写的字符串.但是我收到以下错误:

File "/usr/lib/python3.5/gzip.py", line 258, in write
  data = memoryview(data)
TypeError: memoryview: a bytes-like object is required, not 'str'
Run Code Online (Sandbox Code Playgroud)

为什么我的对象不是字节?如果我打开文件'w'并跳过编码步骤,我会得到相同的错误.如果我'.gz'从文件名中删除,我也会得到同样的错误.

我在Ubuntu 16.04上使用Python3.5

python gzip typeerror python-3.5

12
推荐指数
3
解决办法
7255
查看次数

如何使用Python Setuptools指定脚本的执行权限

我有一个我创建的Python包,我正在使用setuptools.setup()它来安装它.该程序包包含可执行脚本,使用scriptssetup()函数的参数.

我这样安装:

sudo python setup.py install
Run Code Online (Sandbox Code Playgroud)

安装后,可执行脚本位于/usr/local/bin.唯一的问题是权限是:

-rwxr-x---  1 root root   57 Aug 23 15:13 example_script*
Run Code Online (Sandbox Code Playgroud)

代替:

-rwxr-xr-x  1 root root   57 Aug 23 15:13 example_script*
Run Code Online (Sandbox Code Playgroud)

任何人都知道我如何指定输出可执行文件的权限或默认为什么不允许任何人执行?

供参考:我的umask是0027和许可/usr/local/bin/drwxr-xr-x(所有者=根组=根).所有可执行脚本都-rwxr-xr-x在开发区域中具有权限.

python permissions scripting setuptools

6
推荐指数
1
解决办法
827
查看次数

高速缓存行填充,用于变量是高速缓存行大小的倍数

我正在创建一个非常快速的多线程离散事件模拟框架。该框架的核心使用原子和无锁编程技术来实现跨多个线程的快速执行。这要求我将一些变量对齐到高速缓存行并填充剩余的高速缓存行空间,以便没有高速缓存行争用。这是我的方法:

// compute cache line padding size
constexpr u64 CLPAD(u64 _objSize) {
  return ((_objSize / CACHELINE_SIZE) * CACHELINE_SIZE) +
      (((_objSize % CACHELINE_SIZE) > 0) * CACHELINE_SIZE) -
      _objSize;
}

alignas(CACHELINE_SIZE) MyObject myObj;
char padding[CLPAD(sizeof(myObj))];
Run Code Online (Sandbox Code Playgroud)

这对我来说很棒,但是今天当我将这种方法用于新的对象类型时,我偶然发现了一个问题。CLPAD()函数返回将输入类型填充到下一个缓存行所需的字符数。但是,如果我输入的大小恰好是高速缓存行数的倍数,则CLPAD返回0。如果尝试创建大小为零的数组,则会收到以下警告/错误:

ISO C++ forbids zero-size array 'padding'
Run Code Online (Sandbox Code Playgroud)

我知道在这种情况下可以修改CLPAD()以返回CACHELINE_SIZE,但是随后我无缘无故地烧写了一个缓存行空间。

如果CLPAD返回0,如何使“ padding”的声明消失?

c++ simulation multithreading caching lockless

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