我想重新启动 IPython(jupiter)笔记本内核并清除所有输出。键盘快捷键是O,O。但是当我尝试时ESC + O + O,没有任何反应。我错过了什么吗?然而,中断内核的快捷方式I,I有效。
有没有办法在IPython提示符下显示当前目录?
Instead of this:
In [1]:
Something like this:
In<~/user/src/proj1>[1]:
Run Code Online (Sandbox Code Playgroud) 我想使用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) 我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++ 类添加信号处理:
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) 我想写一个带有可变参数的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
我有一个多索引的数据框,如下所示:
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代码中,我有几个级别的调用堆栈,如下所示:
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)。
有时第三方代码中有很多级别,因此我需要按多次。有没有办法将调试器快速带入调用第三方代码的代码框架?
我有一个带有两个参数的函数:
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)
也不会缓存结果。有没有办法在内存库中使用部分对象?
我有一个通过读取文件创建的 Apache 箭头数组。
std::shared_ptr<arrow::Array> array;
PARQUET_THROW_NOT_OK(reader->ReadColumn(0, &array));
Run Code Online (Sandbox Code Playgroud)
有没有办法将其转换为 std::vector 或 C++ 中的任何其他本机数组类型?