boost::thread_groupC++ 11中有什么类似的东西吗?
我只是试图将我的程序从使用移植boost:thread到C++ 11线程,并且无法找到任何等效的东西.
我有一大堆数据点(100,000+)存储在一个二维numpy数组中(第一列:x坐标,第二列:y坐标).我还有几个1维数组存储每个数据点的附加信息.我现在想要从这些一维数组的子集创建图,其中只包含给定多边形中的点.
我提出了以下解决方案,既不优雅也不快:
#XY is the 2D array.
#A is one of the 1D arrays.
#poly is a matplotlib.patches.Polygon
mask = np.array([bool(poly.get_path().contains_point(i)) for i in XY])
matplotlib.pylab.hist(A[mask], 100)
matplotlib.pylab.show()
Run Code Online (Sandbox Code Playgroud)
你能帮我改进一下这段代码吗?我尝试使用np.vectorize而不是列表理解,但无法让它工作.
我目前正在尝试将我的Qt应用程序移植到Mac OSX,只是遇到了以下问题:
我的一个窗口类(派生自QMainWindow)在按下关闭按钮时显示一个对话框,您可以在其中保存/放弃更改或中止.这是通过重新实现closeEvent来完成的,如下所示:
void ResultsWindow::closeEvent(QCloseEvent* event)
{
if (isWindowModified())
{
activateWindow();
QMessageBox::StandardButton button = QMessageBox::warning(
this,
APPLICATION_NAME,
"Warning: data have been modified. Do you want to save the "
"changes?",
QMessageBox::Save | QMessageBox::Discard | QMessageBox::Abort,
QMessageBox::Abort);
switch (button)
{
case QMessageBox::Save:
if (!Save())
{
event->ignore();
return;
}
break;
case QMessageBox::Discard:
break;
case QMessageBox::Abort:
default:
event->ignore();
return;
}
}
event->accept();
}
Run Code Online (Sandbox Code Playgroud)
预期的行为如下:如果单击"中止",则忽略该事件并且窗口保持打开状态.这在Linux和Windows上按预期工作.但是,在OSX上,窗口是隐藏的,但在后台仍然有效.我在这里错过了什么?如何确保窗户保持打开状态?
更新:
我不知何故认为这是Qt5的一个问题.如果该closeEvent方法只包含event->ignore();窗口仍然关闭.我不认为这是预期的行为.也许我应该把这个问题发布到Qt邮件列表......
更新:这是Qt中的一个错误,自5.1版本开始解决.
我想在存储在HDF5文件中的大型数据集(100000+样本)中创建python中的2d直方图.我想出了以下代码:
import sys
import h5py
import numpy as np
import matplotlib as mpl
import matplotlib.pylab
f = h5py.File(sys.argv[1], 'r')
A = f['A']
T = f['T']
at_hist, xedges, yedges = np.histogram2d(T, A, bins=500)
extent = [yedges[0], yedges[-1], xedges[0], xedges[-1]]
fig = mpl.pylab.figure()
at_plot = fig.add_subplot(111)
at_plot.imshow(at_hist, extent=extent, origin='lower', aspect='auto')
mpl.pylab.show()
f.close()
Run Code Online (Sandbox Code Playgroud)
执行大约需要15秒(100000个数据点).然而,CERN的Root(使用自己的树数据结构而不是HDF5)可以在不到1秒内完成此操作.你知道如何加速代码吗?如果它有用,我也可以改变HDF5数据的结构.
我使用宏以下列方式生成类:
generator.h:
class CLASS_NAME : public parent
{
//generate variables with names given by CLASS_VARIABLES using complicated
//Boost.Preprocessor stuff.
};
#undef CLASS_NAME
#undef CLASS_VARIABLES
Run Code Online (Sandbox Code Playgroud)
myclass.h:
#define CLASS_NAME MyClass
#define CLASS_VARIABLES (a, b, c, x, y, z)
#include "generator.h"
Run Code Online (Sandbox Code Playgroud)
实际的类更复杂,并使用各种Boost.Preprocessor宏.有没有办法通过向generator.h添加注释来自动记录使用Doxygen生成的类,或者生成带文档的示例类?我尝试过启用ENABLE_PREPROCESSING和MACRO_EXPANSION,但这似乎不够.