小编Thu*_*411的帖子

matplotlib右侧的y轴标签

有没有一种简单的方法将y轴标签放在图的右侧?我知道这可以用于刻度标签使用ax.yaxis.tick_right(),但我想知道是否也可以为轴标签完成.

想到的一个想法是使用

ax.yaxis.tick_right()
ax2 = ax.twinx()
ax2.set_ylabel('foo')
Run Code Online (Sandbox Code Playgroud)

然而,这不具有将所有标签(刻度线和轴标签)放置在右侧的期望效果,同时保留y轴的范围.简而言之,我想要一种从左到右移动所有y轴标签的方法.

python matplotlib labels

62
推荐指数
4
解决办法
6万
查看次数

用C++打开HDF5文件的更好方法

我一直试图找到解决HDF5 C++绑定的一些缺点的方法.目前,我的代码中充斥着类似于以下内容的try/catch块:

H5::Exception::dontPrint();
H5::H5File *file = NULL;
try {
    file = new H5::H5File(fname.c_str(), H5F_ACC_RDWR);
} catch(H5::FileIException &file_exists_err) {
    file = new H5::H5File(fname.c_str(), H5F_ACC_TRUNC);
}
Run Code Online (Sandbox Code Playgroud)

这不是必需的 - 我想要做的就是打开一个文件进行读/写访问,如果不存在,则创建它.另一个棘手的问题是创建一个嵌套组(例如"/ parent/group"),其中父组不一定存在.在Unix/Linux中,等效的是

mkdir -p parent/group
Run Code Online (Sandbox Code Playgroud)

但是,在HDF5 C++绑定中,创建其父组不存在的组会引发异常.

出于这些原因,我有动力创建一个头文件来处理这些常见问题.我的第一个想法是简单地创建一组函数,例如,采用文件名和访问模式并返回H5 :: H5File对象,或者获取组名并返回组对象.我认为这不太理想,因为它使得使用此头文件的程序员在返回的对象上调用"delete",即使程序员从未在自己的代码中明确地调用"new".这似乎是要求内存泄漏.

因此,我的第二个想法是从H5 :: H5File和H5 :: H5Group创建一组派生类,其中构造函数在文件尚不存在时不会抛出异常,或者当组的父组尚不存在时.我对派生文件类的尝试如下:

namespace H5Utils {

class H5File : public H5::H5File {
public:
    H5File(std::string fname);
    ~H5File();
};

}

H5Utils::H5File::H5File(std::string fname)
try : H5::H5File(fname.c_str(), H5F_ACC_RDWR)
{
    std::cerr << "Opened existing file." << std::endl;
} catch(H5::FileIException &file_exists_err) {
    std::cerr << "File does not exist. …
Run Code Online (Sandbox Code Playgroud)

c++ inheritance hdf5

9
推荐指数
1
解决办法
3390
查看次数

HDF5存储开销

我正在为HDF5文件编写大量的小数据集,并且生成的文件大小大约是我对所投入数据的天真列表所期望的10倍.我的数据按层次结构组织如下:

group 0
    -> subgroup 0
        -> dataset (dimensions: 100 x 4, datatype: float)
        -> dataset (dimensions: 100, datatype: float)
    -> subgroup 1
        -> dataset (dimensions: 100 x 4, datatype: float)
        -> dataset (dimensions: 100, datatype: float)
    ...
group 1
...
Run Code Online (Sandbox Code Playgroud)

每个子组应占用500*4字节= 2000字节,忽略开销.我不会在数据旁边存储任何属性.然而,在测试中,我发现每个子组占用大约4 kB,或者​​大约是我期望的两倍.我知道有一些开销,但它来自哪里,我怎样才能减少它?它是代表群体结构吗?

更多信息:如果我将每个子组中两个数据集的维度增加到1000 x 4和1000,那么每个子组占用大约22,250个字节,而不是我期望的平坦20,000个字节.这意味着每个子组的开销为2.2 kB,并且与我使用较小数据集大小获得的结果一致.有没有办法减少这种开销?

scientific-computing hdf5

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

g++ 和 CMake 损坏的配置文件信息

我正在尝试使用分析来优化一个相当复杂的 C++ 项目(多个源文件,链接到 Boost 库、GSL 和 OpenCV)。使用 CMake,我首先编译

\n\n
set(CMAKE_CXX_FLAGS " -O3 -ffast-math -fprofile-generate=profiling -pg -fopenmp ")\n
Run Code Online (Sandbox Code Playgroud)\n\n

使用典型输入运行生成的可执行文件后,我使用以下命令进行编译

\n\n
set(CMAKE_CXX_FLAGS " -O3 -ffast-math -fprofile-use=profiling -fopenmp ")\n
Run Code Online (Sandbox Code Playgroud)\n\n

编译失败并出现大量错误,如下所示:

\n\n
/n/user/projects/project_name/src/foo.cpp: In member function \xe2\x80\x98double TLinearInterp::operator()(double) const\xe2\x80\x99:\n/n/user/projects/project_name/src/foo.cpp:86:1: error: corrupted profile info: profile data is not flow-consistent\n }\n ^\n/n/user/projects/project_name/src/foo.cpp:86:1: error: corrupted profile info: number of executions for edge 2-7 thought to be -7232\n/n/user/projects/project_name/src/foo.cpp:86:1: error: corrupted profile info: number of executions for edge 2-3 thought to be 20996551\n/n/user/projects/project_name/src/foo.cpp:86:1: error: corrupted profile info: …
Run Code Online (Sandbox Code Playgroud)

c++ profiling g++ compiler-optimization

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

在python中使用matplotlib设置刻度位置时出错

我正在尝试在matplotlib中设置刻度标记位置.运行以下最小示例时出现错误:

import matplotlib.pyplot as plt
import numpy as np
from matplotlib.ticker import MultipleLocator

x = 10.*np.random.randn(1000)
y = 10.*np.random.randn(1000)

fig = plt.figure()
ax = fig.add_subplot(1,1,1)
ax.scatter(x, y)
ax.xaxis.set_major_formatter(MultipleLocator(1.))
ax.yaxis.set_major_formatter(MultipleLocator(1.))
plt.show()
Run Code Online (Sandbox Code Playgroud)

错误在于设置x轴和y轴刻度线的两条线.如果我改为使用NullFormatter(),或者完全省略这些行,代码运行正常并产生预期的图.但是,上面的代码返回以下错误:

Exception in Tkinter callback
Traceback (most recent call last):
  File "/usr/lib/python2.7/lib-tk/Tkinter.py", line 1413, in __call__
    return self.func(*args)
  File "/usr/lib/pymodules/python2.7/matplotlib/backends/backend_tkagg.py", line 245, in resize
    self.show()
  File "/usr/lib/pymodules/python2.7/matplotlib/backends/backend_tkagg.py", line 248, in draw
    FigureCanvasAgg.draw(self)
  File "/usr/lib/pymodules/python2.7/matplotlib/backends/backend_agg.py", line 394, in draw
    self.figure.draw(self.renderer)
  File "/usr/lib/pymodules/python2.7/matplotlib/artist.py", line 55, in draw_wrapper
    draw(artist, renderer, *args, **kwargs)
  File …
Run Code Online (Sandbox Code Playgroud)

python matplotlib

2
推荐指数
1
解决办法
1694
查看次数