我想使用 Google Colab 作为前端来重复运行我在 Google 云端硬盘上的 .py 文件中开发的代码。具体来说,我想使用 vim 等编辑该文件,并让 Colab Notebook 反复重新加载我的更改。
将文件与我的驱动器同步非常简单,安装该驱动器并导入模块一次也是如此。但是,重新加载模块则不然。
使用 或%autoreload 2,module = importlib.reload(module))笔记本似乎最终会对更改的文件做出反应,但速度非常缓慢且不可预测。重新安装驱动器似乎没有效果。对笔记本电脑进行“恢复出厂设置”似乎确实有效,但这速度慢得令人无法接受,因为我每次都必须在对话框中输入新的授权码。
有什么方法可以实现所需的行为吗?
我有一个模板化的容器类:
template<class Stuff>
class Bag{
private:
std::vector<Stuff> mData;
};
Run Code Online (Sandbox Code Playgroud)
我想要做
void InPlace(Bag<Array>& Left){
Bag<Array> temp;
Transform(Left, temp); //fills temp with desirable output
Left = std::move(temp);
}
Run Code Online (Sandbox Code Playgroud)
假设Array具有用户定义的移动语义,但Bag没有.在这种情况下mData会被移动还是复制?
这是一个非常基本的问题; 对不起,如果它很常见,但我找不到具体的答案.
通常我发现自己处于一个对象固有的常量,但需要多行初始化的情况.例如,我想要一个步幅是向量中未知的编译时元素数量的乘积:
const std::vector<int> extentsVector; //pretend this is initialized
int stride = 1;
for (int i=0; i<k; ++i){
stride *= extentsVector[i];
}
Run Code Online (Sandbox Code Playgroud)
无论如何,你明白了.我再也不想接触'stride'所以它应该是const.处理这个问题的首选方法是什么?我是否使用临时值来计算值,然后将其分配给"const"对象?或者是更好的常量?或者我只是把它留给非const?
我正在尝试适合形式的功能:
其中A和B是固定常数.在scipy中,我通常(我认为合理规范)解决此类问题的方法如下:
def func(t, coefs):
phase = np.poly1d(coefs)(t)
return A * np.cos(phase) + B
def fit(time, data, guess_coefs):
residuals = lambda p: func(time, p) - data
fit_coefs = scipy.optimize.leastsq(residuals, guess_coefs)
return fit_coefs
Run Code Online (Sandbox Code Playgroud)
这项工作正常,但我想提供一个分析雅可比行列式来改善收敛性.从而:
def jacobian(t, coefs):
phase = np.poly1d(coefs, t)
the_jacobian = []
for i in np.arange(len(coefs)):
the_jac.append(-A*np.sin(phase)*(t**i))
return the_jac
def fit(time, data, guess_coefs):
residuals = lambda p: func(time, p) - data
jac = lambda p: jacobian(time, p)
fit_coefs = scipy.optimize.leastsq(residuals, guess_coefs,
Dfun=jac, col_deriv=True)
Run Code Online (Sandbox Code Playgroud)
即使订单为2或更低,这也不会起作用.使用optimize.check_gradient()快速检查也不会产生积极的结果.
我几乎可以肯定Jacobian和代码是正确的(虽然请纠正我)并且问题更为基础:雅各比派中的t**i术语会导致溢出错误.这在函数本身中不是问题,因为这里单项式项乘以它们非常小的系数.
我的问题是: