小编Max*_*Max的帖子

如何在matplotlib中绘制一条轴外的线(图中坐标)?

Matplotlib有一个函数,用于在图形坐标中写入文本(.figtext())

有没有办法做同样的但绘制线条?

特别是我的目标是画线以将y轴上的一些刻度组合在一起.

python plot matplotlib

14
推荐指数
1
解决办法
1万
查看次数

python堆栈跟踪中绝对/相对路径的含义

我跑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)

python

8
推荐指数
1
解决办法
513
查看次数

如何使用Valgrind调试堆栈覆盖错误?

我只是花了一些时间来追逐一个归结为以下的错误.代码错误地覆盖了堆栈,我认为它写了函数调用的返回地址.返回后,程序将崩溃并且堆栈将被破坏.在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或其他任何东西能否做到这一点?如果没有,您是否可以有效地评论有关此类调试错误的其他建议.

stack-overflow valgrind

7
推荐指数
2
解决办法
8914
查看次数

Java泛型何时在运行时使用转换?

我正在阅读有关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是否可以忽略运行时转换检查?

(请不要回答/评论微观优化是不值得的,先发制人的优化是万恶之源等等.我在其他类似的问题上看到了这些.这些点很好理解,但它们并没有带走尝试点了解如何在引擎盖下实现类型擦除的泛型.)

java generics

6
推荐指数
2
解决办法
1370
查看次数

具有快速插入和索引的容器?

我正在寻找一个C++容器类,它被编入索引std::vector,但具有快速插入,删除和索引.例如,vector使用底层平衡树实现的接口也将具有O(logN)插入/删除和O(logN)索引.

要明确:我不是在寻找std::map<int, T>.在索引处插入元素N应该增加数组中所有后续元素的索引,而不是这种情况std::map<int, T>.

我找到了AVL Array,它完全符合我的要求.它有正确的界面,但我想看看是否还有其他选择.

你知道其他任何(生产质量)实现吗?也许更流行的东西(提升有什么类似的东西?).内存占用较少的东西?(在我的机器上,在AVL阵列中保存指针的节点是64字节.)

c++ vector avl-tree

5
推荐指数
1
解决办法
206
查看次数

包装setjmp和longjmp有什么奇怪的?

我第一次使用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)

c gcc exception-handling

4
推荐指数
1
解决办法
595
查看次数

Boehm GC:如何有效地调试破碎的堆对象?

运行我的程序时,我从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中的一个问题 - 我应该忽略它吗?

有没有人有任何想法如何有效地调试这个?

或者,任何人都能解释上述消息的确切含义吗?

c garbage-collection valgrind boehm-gc

2
推荐指数
1
解决办法
563
查看次数

C中的"动态位域"

在这个问题中,假设所有整数都是无符号的.

假设我想编写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,<<和>>来整合的位串.在我实施和测试之前,也许有人看到了一个聪明的快速解决方案?

c bit-manipulation

1
推荐指数
1
解决办法
1109
查看次数

为什么Python json模块将map键中的浮点数表示为字符串?

请参阅以下代码:

>>> 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模块会这样做?

python floating-point json

0
推荐指数
1
解决办法
538
查看次数