Matplotlib有一个函数,用于在图形坐标中写入文本(.figtext())
有没有办法做同样的但绘制线条?
特别是我的目标是画线以将y轴上的一些刻度组合在一起.
我跑top_level_script.py
了一个异常,堆栈跟踪如下:
File "top_level_script.py", line 114, in main
…
File "top_level_script.py", line 91, in func1
...
File "top_level_script.py", line 68, in func2
**kwargs)
File "/home/max/.../cccc/ffff/mmmm.py", line 69, in some_func
obj = SomeClass(…)
File "mmm/ttt/bbb/core.py", line 17, in __init__
File "/home/max/.../pppp/pppp.py", line 474, in func
...
File "/home/max/.../pppp/pppp.py", line 355, in some_func
...
Run Code Online (Sandbox Code Playgroud)
请注意,它mmm/ttt/bbb/core.py
具有相对路径,而其上方和下方的帧具有绝对路径.此外,第17行中没有打印__init__
,并且被调用的代码是"旧".我只是改变了它,但旧代码被调用了.因此例外.
我仍然发现Python的导入机制有时令人困惑.任何人都可以阐明core.py
这个框架中显示的相对路径的含义和重要性(如果有的话)是什么?
经过一些修补,我的假设是python以某种方式调用.pyc
(因此没有显示在下面的行中).在修改文件(即更改并保存)之后,我现在得到:
File "top_level_script.py", line 114, in main
…
File "top_level_script.py", line 91, in func1
...
File "top_level_script.py", …
Run Code Online (Sandbox Code Playgroud) 我只是花了一些时间来追逐一个归结为以下的错误.代码错误地覆盖了堆栈,我认为它写了函数调用的返回地址.返回后,程序将崩溃并且堆栈将被破坏.在valgrind中运行程序将返回错误,例如:
vex x86->IR: unhandled instruction bytes: 0xEA 0x3 0x0 0x0
==9222== valgrind: Unrecognised instruction at address 0x4e925a8.
Run Code Online (Sandbox Code Playgroud)
我认为这是因为返回跳转到一个随机位置,包含无效的x86操作码.(虽然我有点怀疑这个地址0x4e925a8恰好在一个可执行页面中.我想如果不是这样的话,valgrind会抛出一个不同的错误.)
我确定问题是堆栈覆盖类型,我已经修复了它.现在我正在努力思考如何更有效地捕捉这样的错误.显然,如果我在堆栈上重写数据,valgrind就不能警告我,但是当有人在堆栈上写入返回地址时,它可能会捕获.原则上,它可以检测何时发生'push EIP'(因此它可以标记返回地址在堆栈中的位置).
我想知道是否有人知道Valgrind或其他任何东西能否做到这一点?如果没有,您是否可以有效地评论有关此类调试错误的其他建议.
我正在阅读有关C++模板和C#泛型的讨论,以及它们与Java类型擦除泛型的不同之处.我读了一条声明说Java仍然在运行时使用转换,例如在处理集合时.如果这是真的,我不知道它!
假设我有以下代码:
ArrayList<SomeClass> list = new ArrayList<SomeClass>();
...
SomeClass object = list.get(0);
Run Code Online (Sandbox Code Playgroud)
我的问题是.这是否有效编译
ArrayList list = new ArrayList();
...
SomeClass object = (SomeClass) list.get(0);
Run Code Online (Sandbox Code Playgroud)
如果是这样,为什么?我认为list是类型ArrayList<SomeClass>
保证的事实,在编译时和运行时,只有SomeClass将存储在ArrayList中?或者你可以做不安全的类型转换来转换ArrayList<OtherClass>
为ArrayList<SomeClass>
?
是否有其他场合在Java泛型中进行运行时类型转换?
最后,如果确实使用了在运行时进行的转换,那么JIT是否可以忽略运行时转换检查?
(请不要回答/评论微观优化是不值得的,先发制人的优化是万恶之源等等.我在其他类似的问题上看到了这些.这些点很好理解,但它们并没有带走尝试点了解如何在引擎盖下实现类型擦除的泛型.)
我正在寻找一个C++容器类,它被编入索引std::vector
,但具有快速插入,删除和索引.例如,vector
使用底层平衡树实现的接口也将具有O(logN)插入/删除和O(logN)索引.
要明确:我不是在寻找std::map<int, T>
.在索引处插入元素N
应该增加数组中所有后续元素的索引,而不是这种情况std::map<int, T>
.
我找到了AVL Array,它完全符合我的要求.它有正确的界面,但我想看看是否还有其他选择.
你知道其他任何(生产质量)实现吗?也许更流行的东西(提升有什么类似的东西?).内存占用较少的东西?(在我的机器上,在AVL阵列中保存指针的节点是64字节.)
我第一次使用setjmp和longjmp,我遇到了一个问题,当我包装setjmp和longjmp时.我将代码煮成以下示例:
#include <stdio.h>
#include <setjmp.h>
jmp_buf jb;
int mywrap_save()
{
int i = setjmp(jb);
return i;
}
int mywrap_call()
{
longjmp(jb, 1);
printf("this shouldn't appear\n");
}
void example_wrap()
{
if (mywrap_save() == 0){
printf("wrap: try block\n");
mywrap_call();
} else {
printf("wrap: catch block\n");
}
}
void example_non_wrap()
{
if (setjmp(jb) == 0){
printf("non_wrap: try block\n");
longjmp(jb, 1);
} else {
printf("non_wrap: catch block\n");
}
}
int main()
{
example_wrap();
example_non_wrap();
}
Run Code Online (Sandbox Code Playgroud)
最初我认为example_wrap()和example_non_wrap()的行为相同.但是,运行程序的结果(GCC 4.4,Linux):
wrap: try block
non_wrap: try block
non_wrap: …
Run Code Online (Sandbox Code Playgroud) 运行我的程序时,我从Boehm GC中获得以下错误(定义了GC_DEBUG):
GC_check_heap_block: found smashed heap objects:
0x8ef1008 in or near object at 0x8ef1010(<smashed>, appr. sz = 29)
0x8ef1188 in or near object at 0x8ef1190(<smashed>, appr. sz = 29)
...
Run Code Online (Sandbox Code Playgroud)
以上持续约20次.
奇怪的是,我找不到程序的任何问题,它做了它应该做的事情,并且没有崩溃.
我可以编译我的程序来禁用GC.然后我可以用它运行valgrind,但奇怪的是,valgrind没有发现任何问题!
这可能是Boehm GC中的一个问题 - 我应该忽略它吗?
有没有人有任何想法如何有效地调试这个?
或者,任何人都能解释上述消息的确切含义吗?
在这个问题中,假设所有整数都是无符号的.
假设我想编写2个函数,打包和解包,这样可以将较小宽度的整数打包成64位整数.但是,整数的位置和宽度是在运行时给出的,所以我不能使用C位域.
最快的是用一个例子来解释.为简单起见,我将用8位整数来说明:
* *
bit # 8 7 6 5 4 3 2 1
myint 0 1 1 0 0 0 1 1
Run Code Online (Sandbox Code Playgroud)
假设我想在位置5处"解包",这是一个宽度为2的整数.这些是用星号标记的两位.该操作的结果应为0b01.同样,如果我在宽度为6的位置2解包,我会得到0b100011.
我可以使用bithift-left和bithift right轻松编写解包函数.
但我想不出一个明确的方法来编写一个等效的"包"函数,这将做相反的事情.
假设给定一个整数0b11,将其打包到位置5的myint(从上面),宽度2将产生
* *
bit # 8 7 6 5 4 3 2 1
myint 0 1 1 1 0 0 1 1
Run Code Online (Sandbox Code Playgroud)
我想出的最好的东西涉及很多用OR,<<和>>来整合的位串.在我实施和测试之前,也许有人看到了一个聪明的快速解决方案?
请参阅以下代码:
>>> import json
>>> m = {}
>>> m[0.0] = 1.0
>>> json.dumps(m)
'{"0.0": 1.0}'
Run Code Online (Sandbox Code Playgroud)
在地图的价值中,我们有1.0.但是在键中我们有"0.0"(一个Json字符串).
浮动的这种模糊处理只花了我一些调试时间.有谁知道为什么python的json模块会这样做?