有没有一种简单的方法将y轴标签放在图的右侧?我知道这可以用于刻度标签使用ax.yaxis.tick_right(),但我想知道是否也可以为轴标签完成.
想到的一个想法是使用
ax.yaxis.tick_right()
ax2 = ax.twinx()
ax2.set_ylabel('foo')
Run Code Online (Sandbox Code Playgroud)
然而,这不具有将所有标签(刻度线和轴标签)放置在右侧的期望效果,同时保留y轴的范围.简而言之,我想要一种从左到右移动所有y轴标签的方法.
我一直试图找到解决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) 我正在为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,并且与我使用较小数据集大小获得的结果一致.有没有办法减少这种开销?
我正在尝试使用分析来优化一个相当复杂的 C++ 项目(多个源文件,链接到 Boost 库、GSL 和 OpenCV)。使用 CMake,我首先编译
\n\nset(CMAKE_CXX_FLAGS " -O3 -ffast-math -fprofile-generate=profiling -pg -fopenmp ")\nRun Code Online (Sandbox Code Playgroud)\n\n使用典型输入运行生成的可执行文件后,我使用以下命令进行编译
\n\nset(CMAKE_CXX_FLAGS " -O3 -ffast-math -fprofile-use=profiling -fopenmp ")\nRun 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) 我正在尝试在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)