小编mot*_*m79的帖子

IPython notebook 如何重启内核,使用键盘快捷键

我想重新启动 IPython(jupiter)笔记本内核并清除所有输出。键盘快捷键是O,O。但是当我尝试时ESC + O + O,没有任何反应。我错过了什么吗?然而,中断内核的快捷方式I,I有效。

jupyter-notebook

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

如何在ipython提示中显示当前目录

有没有办法在IPython提示符下显示当前目录?

Instead of this:
In [1]:

Something like this:
In<~/user/src/proj1>[1]:
Run Code Online (Sandbox Code Playgroud)

python prompt ipython

8
推荐指数
4
解决办法
2万
查看次数

如何使用joblib.Memory缓存Python类的成员函数的输出

我想使用joblib.Memory库来缓存类的成员函数的输出.这是一个示例代码:

import joblib
import numpy as np

mem = joblib.Memory(cachedir='/tmp', verbose=1)


@mem.cache
def my_sum(x):
    return np.sum(x)


class TestClass(object):
    def __init__(self):
        pass

    @mem.cache
    def my_sum(self, x):
        return np.sum(x)


if __name__ == '__main__':
    x = np.array([1, 2, 3, 4])
    a = TestClass()
    print a.my_sum(x)  # does not work
    print my_sum(x) # works fine
Run Code Online (Sandbox Code Playgroud)

但是,我收到以下错误:

/nfs/sw/anaconda2/lib/python2.7/site-packages/joblib/memory.pyc in _get_output_dir(self, *args, **kwargs)
    512             of the function called with the given arguments.
    513         """
--> 514         argument_hash = self._get_argument_hash(*args, **kwargs)
    515         output_dir = os.path.join(self._get_func_dir(self.func), …
Run Code Online (Sandbox Code Playgroud)

python memory caching decorator joblib

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

Boost堆栈跟踪不显示函数名称和行号

boost::stacktrace通过尝试一个简单的示例来打印递归函数的调用堆栈来进行探索。

#include "boost/stacktrace.hpp"

int factorial(int x){
    if (x < 2) {
        std::cout << boost::stacktrace::stacktrace();
        return 1;
    }
    return x * factorial(x - 1);
}

int main(int ac, char *av[]) {
    std::cout << factorial(4);
}
Run Code Online (Sandbox Code Playgroud)

但是,代码的输出不包含有关函数名称和行号的任何信息:

 0# 0x000055A6F6B57C0F in /home/user/myapp
 1# 0x000055A6F6B57C42 in /home/user/myapp
 2# 0x000055A6F6B57C42 in /home/user/myapp
 3# 0x000055A6F6B57C42 in /home/user/myapp
 4# 0x000055A6F6B57C9D in /home/user/myapp
 5# __libc_start_main in /lib/x86_64-linux-gnu/libc.so.6
 6# 0x000055A6F6B57AEA in /home/user/myapp
Run Code Online (Sandbox Code Playgroud)

这与boost网站的示例输出相反:(从https://www.boost.org/doc/libs/1_68_0/doc/html/stacktrace/getting_started.html#stacktrace.getting_started.how_to_print_current_call_stack复制)

0# bar(int) at /path/to/source/file.cpp:70
1# bar(int) at /path/to/source/file.cpp:70
2# bar(int) at /path/to/source/file.cpp:70 …
Run Code Online (Sandbox Code Playgroud)

c++ boost stack-trace

8
推荐指数
2
解决办法
1078
查看次数

如何在 C++ 中使用 std::bind 函数作为信号处理程序?

我正在使用以下代码向我的 C++ 类添加信号处理:

namespace {
    std::atomic<bool> signal_flag(false);   
}
void terminate_or_interrupt_handler(int signal) {
    switch (signal) {
        case SIGTERM:
            WARN("SIGTERM received");
            signal_flag.store(true);
            break;
        case SIGINT:
            WARN("SIGINT received");
            signal_flag.store(true);
            break;
        default:
            throw (std::runtime_error("Unhandled signal received"));
    }
}
signal(SIGTERM, &terminate_or_interrupt_handler);
Run Code Online (Sandbox Code Playgroud)

此代码有效,但它需要在与信号标志变量相同的范围内定义信号处理函数。我决定修改代码并将通过signal_flag引用传递给函数并用于std::bind将处理程序“专门化”到我的类。

 void terminate_or_interrupt_handler(std::atomic<bool>& signal_flag, int signal) {
    switch (signal) {
        case SIGTERM:
            WARN("SIGTERM received");
            signal_flag.store(true);
            break;
        case SIGINT:
            WARN("SIGINT received");
            signal_flag.store(true);
            break;
        default:
            throw (std::runtime_error("Unhandled signal received"));
    }
}
auto my_handler = std::bind(terminate_or_interrupt_handler, std::ref(my_class_signal_flag), std::placeholders::_1);
signal(SIGTERM, &my_handler);
Run Code Online (Sandbox Code Playgroud)

但是,我收到此编译错误:

error: cannot …
Run Code Online (Sandbox Code Playgroud)

c++ signals stdbind

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

如何在模板折叠表达式中使用constexpr?

我想写一个带有可变参数的sum函数,条件是它应该忽略不是的参数 std::is_arithmetic

我找到了一个有效的递归版本

auto old_sum(){
    return 0;
}

template<typename T1, typename... T>
auto old_sum(T1 s, T... ts){
    if constexpr(std::is_arithmetic_v<T1>)
        return s + old_sum(ts...);
    else
        return old_sum(ts...);
}
Run Code Online (Sandbox Code Playgroud)

我想知道我是否可以if constexpr在fold表达式的上下文中使用以下代码仅考虑参数包中的算术类型:

template<typename... T>
auto fold_sum(T... s){
    return (... + s);
}
Run Code Online (Sandbox Code Playgroud)

c++ template-meta-programming variadic-templates fold-expression c++17

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

pandas multi-index如何通过二级掩盖数据

我有一个多索引的数据框,如下所示:

Date      Period     Value \n
20130101    0          12 \n
20130101    1          13
20130102    0          13
20130102    1          14
Run Code Online (Sandbox Code Playgroud)

第一级是日期,第二级是期.我想设置周期不为零的值,输出将是这样的:

Date      Period     Value
20130101    0          12
20130101    1          0
20130102    0          13
20130102    1          0
Run Code Online (Sandbox Code Playgroud)

如果第二级是列而不是索引,那么解决方案将很容易df.Value.loc[df.Period == 0] =0.

有没有办法通过使用索引实现这一目标?

python indexing dataframe pandas

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

ipdb如何将python调试器带到称为第三方代码的框架

在我的python代码中,我有几个级别的调用堆栈,如下所示:

f1:user_func1 
  f2:**user_func2**
    f3:third_party_func1
      f4:third_party_func2
          f5:exception happens here. 
Run Code Online (Sandbox Code Playgroud)

第三方代码中某处发生异常(框架f5)。我使用ipdb进入发生异常的框架,并使用up命令“ u”将调试器带回到我的代码调用第三方代码的框架(框架f2)。

有时第三方代码中有很多级别,因此我需要按多次。有没有办法将调试器快速带入调用第三方代码的代码框架?

python debugging ipdb

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

使用带有部分对象的 Joblib 内存库

我有一个带有两个参数的函数:

def foo(x,y):
   # some complicated math
   return result
Run Code Online (Sandbox Code Playgroud)

我使用functools库定义了部分:

f1 = partial(foo,1)
f2 = partial(foo,2)
Run Code Online (Sandbox Code Playgroud)

现在我想使用该joblib.Memory库将结果缓存在磁盘中以避免重新计算。

from joblib import Memory
mem = Memory(cachedir = '/tmp')    
f1c = mem.cache(f1)
f2c = mem.cache(f2)
res1 = f1c(10)
res2 = f1c(10)
Run Code Online (Sandbox Code Playgroud)

当我运行代码时,我收到警告:

JobLibCollisionWarning: Cannot detect name collisions
for function 'unknown
Run Code Online (Sandbox Code Playgroud)

也不会缓存结果。有没有办法在内存库中使用部分对象?

python caching partial joblib

6
推荐指数
0
解决办法
231
查看次数

如何将 arrow::Array 转换为 std::vector?

我有一个通过读取文件创建的 Apache 箭头数组。

std::shared_ptr<arrow::Array> array;
PARQUET_THROW_NOT_OK(reader->ReadColumn(0, &array));
Run Code Online (Sandbox Code Playgroud)

有没有办法将其转换为 std::vector 或 C++ 中的任何其他本机数组类型?

c++ arrays vector apache-arrow

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