我使用matplotlib创建2d线图.出于发布的目的,我想将这些图分为黑白(不是灰度),我正在努力寻找一种非侵入性的解决方案.
Gnuplot会自动改变不同线条的划线模式,与matplotlib类似吗?
我想从c ++代码中返回一些数据作为numpy.array对象.我看了一下boost::python::numeric,但它的文档非常简洁.我可以得到一个例子,例如将一个(不是很大)返回vector<double>给python吗?我不介意做数据的副本.
我试图迭代一些std::lists,对它们进行排序.这是天真的方法:
#include<list>
using namespace std;
int main(void){
list<int> a,b,c;
for(auto& l:{a,b,c}) l.sort();
}
Run Code Online (Sandbox Code Playgroud)
生产
aa.cpp:5:25: error: no matching member function for call to 'sort'
for(auto& l:{a,b,c}) l.sort();
~~^~~~
/usr/bin/../lib64/gcc/x86_64-linux-gnu/4.9/../../../../include/c++/4.9/bits/stl_list.h:1586:7: note:
candidate function not viable: 'this' argument has type 'const
std::list<int, std::allocator<int> >', but method is not marked const
sort();
^
/usr/bin/../lib64/gcc/x86_64-linux-gnu/4.9/../../../../include/c++/4.9/bits/stl_list.h:1596:9: note:
candidate function template not viable: requires 1 argument, but 0 were
provided
sort(_StrictWeakOrdering);
^
1 error generated.
Run Code Online (Sandbox Code Playgroud)
我是否正确地猜测大括号初始化程序正在创建这些列表的副本?有没有办法不复制它们,并使它们在循环中可修改?(除了制作指向它们的指针列表,这是我目前的解决方法).
我有一些在.h文件中定义的小函数.这是一个小项目(现在),我想避免将声明和定义分开的痛苦,因为它们一直在变化.为了避免多重定义的符号,我可以拥有它们static或inline.什么应该是首选,为什么?
我知道在头文件中定义函数通常是不好的做法.您不必在答案中提及,这个问题在技术上意味着.
独立的STL算法(如std::count_if)采用一对迭代器.在我使用这些的所有情况下(以及我在网上看到的所有例子中),我发现自己打字了
std::count_if(myContainer.begin(),myContainer.end(), /* ... */ );
Run Code Online (Sandbox Code Playgroud)
是否有为什么样式的速记模板的原因
std::count_if(myContainer, /* ... */ );
Run Code Online (Sandbox Code Playgroud)
鉴于在整个集装箱上进行的操作不是很多而没有提供?我只是忽略了它吗?答案是否与c ++ 11和c ++ 03不同?
我有一个带有枚举的c ++类,我想模仿它boost::python,以便我可以用MyClass.valuepython 编写.boost::python::class_没有enum_方法,我正在寻找解决方法.
我第一次尝试使用lambdas
MyClass{
enum{value1,value2};
};
class_<MyClass>("MyClass").add_property("value1",&[](){return value1;}).staticmethod("value1");
Run Code Online (Sandbox Code Playgroud)
这给出了编译器错误(in get_signaturefor add_property).我知道我可以为每个值创建getter方法,但这对我来说似乎很尴尬(打字方式).
使用attr:
auto classObj=class_<MyClass>("MyClass");
classObj.attr("value1")=(int)value1;
classObj.attr("value2")=(int)value2;
Run Code Online (Sandbox Code Playgroud)
但它不能像.def其他方法一样链接返回对实例的引用.
有更优雅的解决方案吗?
我打开现有的HDF5文件来追加数据; 我想确保调用的组/A存在后续访问.我正在寻找一种简单的方法来创建/A条件(创建并返回新组,如果不存在,或返回现有组).一种方法是测试/A存在.我怎样才能有效地做到这一点?
根据API文档,我可以这样做:
H5::H5File h5file(filename,H5F_ACC_RDWR);
H5::H5Group grp;
try{
grp=h5file.openGroup("A");
} catch(H5::Exception& e){
/* group does not exists, create it */
grp=h5file.createGroup("A");
}
Run Code Online (Sandbox Code Playgroud)
但明显的丑陋来自这样一个事实,即例外用于传递信息,而这些信息根本不是特例.
有H5 :: CommonFG :: getObjinfo,它似乎以这样的方式包装H5Gget_objinfo,C例程的false(不存在)返回值抛出异常; 所以再次出现同样的问题.
在这种情况下,使用C API是否干净,或者是否有一些直接设计用于测试C++ API存在的函数,我忽略了?
我有一个小部件,当切换选项时,它会发生变化.这会使所有布局和小部件无效.我保留所有布局的列表,所以我可以使用类似于这个答案的东西删除它们:
class MyWidget(QFrame):
# ...
def reLayout(self):
def deleteLayoutChilds(l):
while l.count():
item=l.takeAt(0)
widget=item.widget()
if widget: widget.deleteLater()
else: deleteLayoutChilds(item.layout())
for l in self.allLayouts: deleteLayoutChilds(l)
# now install the new layout
##
## how to delete the old layout first?
l=self.layout(); del l # no effect
#
layout=QGridLayout(self)
## warning: QLayout: Attempting to add QLayout "" to MyWidget "", which already has a layout.
Run Code Online (Sandbox Code Playgroud)
如何摆脱旧布局并设置新布局?
文档非常简洁,显然不能直接应用于python:
QWidget.setLayout(self,QLayout)
QLayout论证将其所有权转移到Qt.
将此窗口小部件的布局管理器设置为布局.
如果此窗口小部件上已安装布局管理器,则QWidget将不允许您安装另一个布局管理器.您必须先删除现有布局管理器(由layout()返回),然后才能使用新布局调用setLayout().
如果layout是不同小部件上的布局管理器,则setLayout()将重新布局布局并使其成为此小部件的布局管理器.
例:
Run Code Online (Sandbox Code Playgroud)QVBoxLayout *layout = new QVBoxLayout; layout->addWidget(formWidget); …
我正在创建直方图
pylab.hist(data,weights,histtype='step',normed=False,bins=150,cumulative=True)
Run Code Online (Sandbox Code Playgroud)
得到(还有其他的情节,现在是无关紧要的)紫罗兰色的线条

为什么直方图再次降到零?累积函数通常应该是非递减的.有没有办法解决这个问题,无论是错误还是功能?
编辑:解决方案(黑客):
# histtype=step returns a single patch, open polygon
n,bins,patches=pylab.hist(data,weights,histtype='step',cumulative=True)
# just delete the last point
patches[0].set_xy(patches[0].get_xy()[:-1])
Run Code Online (Sandbox Code Playgroud) 我正在使用futurize --stage2,它适用于许多源 - 源转换,使代码python2和python3兼容.其中一个修复是所有的部门a/b都被替换为old_div(a/b),我想避免(有太多,其中很多都被不必要地替换,例如math.pi/2..文档说--nofix(或-x)可以用来避免运行某些修复,但尝试--nofix=fix_divison或--nofix=libfuturize.fixes.fix_divison没有效果--stage2.有人可能会帮助如何忽略该特定修复程序吗?
c++ ×5
boost-python ×2
c++11 ×2
matplotlib ×2
python ×2
arrays ×1
c ×1
containers ×1
enums ×1
hdf5 ×1
header-files ×1
histogram ×1
inline ×1
iterator ×1
layout ×1
numpy ×1
pyqt4 ×1
python-2.x ×1
python-3.x ×1
qt4 ×1
static ×1
stl ×1