我有一个ndarray
与在蟒蛇dtype
的float64
.我想将数组转换为整数数组.我该怎么做?
int()
将无法正常工作,因为它说它无法将其转换为标量.dtype
显然改变字段本身不起作用,因为实际字节没有改变.我似乎无法在Google或文档中找到任何内容 - 最好的方法是什么?
我打算声明一个原子变量向量,用作多线程程序中的计数器.这是我尝试过的:
#include <atomic>
#include <vector>
int main(void)
{
std::vector<std::atomic<int>> v_a;
std::atomic<int> a_i(1);
v_a.push_back(a_i);
return 0;
}
Run Code Online (Sandbox Code Playgroud)
这是gcc 4.6.3的烦人冗长的错误信息:
In file included from /usr/include/c++/4.6/x86_64-linux-gnu/./bits/c++allocator.h:34:0,
from /usr/include/c++/4.6/bits/allocator.h:48,
from /usr/include/c++/4.6/vector:62,
from test_atomic_vec.h:2,
from test_atomic_vec.cc:1:
/usr/include/c++/4.6/ext/new_allocator.h: In member function ‘void __gnu_cxx::new_allocator<_Tp>::construct(__gnu_cxx::new_allocator<_Tp>::pointer, const _Tp&) [with _Tp = std::atomic<int>, __gnu_cxx::new_allocator<_Tp>::pointer = std::atomic<int>*]’:
/usr/include/c++/4.6/bits/stl_vector.h:830:6: instantiated from ‘void std::vector<_Tp, _Alloc>::push_back(const value_type&) [with _Tp = std::atomic<int>, _Alloc = std::allocator<std::atomic<int> >, std::vector<_Tp, _Alloc>::value_type = std::atomic<int>]’
test_atomic_vec.cc:10:20: instantiated from here
/usr/include/c++/4.6/ext/new_allocator.h:108:9: error: use of deleted function ‘std::atomic<int>::atomic(const std::atomic<int>&)’
/usr/include/c++/4.6/atomic:538:7: error: declared …
Run Code Online (Sandbox Code Playgroud) 这是这个问题的后续问题:具有任何参数列表的函数的泛型函子
我有这个仿函数类(完整代码见上面的链接):
template<typename... ARGS>
class Foo
{
std::function<void(ARGS...)> m_f;
public:
Foo( std::function<void(ARGS...)> f ) : m_f(f) {}
void operator()(ARGS... args) const { m_f(args...); }
};
Run Code Online (Sandbox Code Playgroud)
在operator()中,我可以使用递归的"剥离"功能轻松访问args ...如http://www2.research.att.com/~bs/C++0xFAQ.html#variadic-templates
我的问题是:我想在构造函数中访问f的参数类型,即ARGS ....显然我无法访问值,因为到目前为止还没有,但参数类型列表以某种方式埋没在f中,不是吗?
这在某种程度上是学术性的,但不过.
Python语法禁止使用数字启动变量名称.但这可以像这样回避:
>>> globals()['1a'] = 1
>>> globals()['1a']
1
Run Code Online (Sandbox Code Playgroud)
同样地locals()
.
这是否意味着,Python实际上允许它,只是不是很明显?
编辑:
我的问题不是,是否允许.我知道,它在Python中是正式不允许的.问题是为什么我可以通过globals()
直接解决来解决它,并且这会破坏其他规则或指导方针,甚至可能有一个很好的理由/应用程序来允许它.
我试图在C++程序中的回溯中找到确切的调用行.现在我正在使用这些行(来自backtrace的手册页)来获取跟踪:
void *bt_buffer[1000];
char **bt_strings;
int bt_nptrs = backtrace(bt_buffer, 1000);
bt_strings = backtrace_symbols(bt_buffer, bt_nptrs);
Run Code Online (Sandbox Code Playgroud)
在bt_strings中,我找到了表单的行
./prog() [0x402e42]
Run Code Online (Sandbox Code Playgroud)
现在我取地址(十六进制字符串)并将其提供给addr2line.这有时会导致明显错误的行号.互联网搜索让我看到这篇文章,其中显示了这一点
readelf -wl ./prog
Run Code Online (Sandbox Code Playgroud)
表示该行的确实位置,或者表示该符号移动到当前行的行数.
编辑:这种情况发生在我编译时-g -O0
,即明确没有优化.编译器gcc 4.6.3
是否有我错过的另一个编译器标志?
我的问题如下:我需要自动执行此操作.我需要我的程序来创建一个回溯(完成),提取文件(完成)和行号(失败).
我当然可以调用readelf
和解析输出,但这并不合适,因为输出因符号而异,具体取决于具体发生的情况.有时符号的地址在一行中,而在下一行中有关行偏移的信息......
总结一下:
有没有一种优雅的方法可以在运行时从程序中的回溯中获取函数调用的确切行号?
编辑:示例代码:
#define UNW_LOCAL_ONLY
#include <libunwind.h>
#include <execinfo.h>
#include <iostream>
#include <stdlib.h>
void show_backtrace()
{
// get current address
void* p = __builtin_return_address(0);
std::cout << std::hex << p << std::endl;
// get callee addresses
p = __builtin_return_address(1);
std::cout << std::hex …
Run Code Online (Sandbox Code Playgroud) 我需要从C++程序中获取addr2line提供的信息(来自回溯函数调用的文件和行).是否有类似于addr2line的库调用?
编辑:我在Linux环境中工作.
我知道我可以直接调用addr2line,我知道我可以在我的程序中使用addr2line 的源代码(也是GPL许可).但我想调用库函数(如果存在)更清晰.
编辑:我将使用binutils的bfd,就像addr2line一样.无论如何,bfd意味着什么?
在Python3中,此表达式的计算结果如下False
:
b"" == ""
Run Code Online (Sandbox Code Playgroud)
而在Python2中,这种比较是True
:
u"" == ""
Run Code Online (Sandbox Code Playgroud)
is
在两种情况下,检查身份都明显失败.
但是为什么他们会在Python3中实现这样的行为呢?
我希望我的一些工具栏操作看起来是左边的,有些是右边的.我Gtk我记得添加了一个可伸缩(可扩展)的分隔符.我如何在Qt中实现这一目标?
我使用Qt Creator,但我不怕编辑源代码,因此非常感谢任何一种解决方案.
为什么要使用格式字符串强制使用元组(或字典):
"%s %d" % ("text", 42)
Run Code Online (Sandbox Code Playgroud)
以下会有什么不利之处?
"%s %d" % ["text", 42]
Run Code Online (Sandbox Code Playgroud)