小编AGM*_*GML的帖子

让 Colab 在 Drive 上重新加载最近更改的模块

我想使用 Google Colab 作为前端来重复运行我在 Google 云端硬盘上的 .py 文件中开发的代码。具体来说,我想使用 vim 等编辑该文件,并让 Colab Notebook 反复重新加载我的更改。

将文件与我的驱动器同步非常简单,安装该驱动器并导入模块一次也是如此。但是,重新加载模块则不然。

使用 或%autoreload 2module = importlib.reload(module))笔记本似乎最终会对更改的文件做出反应,但速度非常缓慢且不可预测。重新安装驱动器似乎没有效果。对笔记本电脑进行“恢复出厂设置”似乎确实有效,但这速度慢得令人无法接受,因为我每次都必须在对话框中输入新的授权码。

有什么方法可以实现所需的行为吗?

google-drive-api google-colaboratory

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

容器中需要显式移动构造函数吗?

我有一个模板化的容器类:

 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会被移动还是复制?

c++ c++11

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

处理需要多行初始化的'const'对象

这是一个非常基本的问题; 对不起,如果它很常见,但我找不到具体的答案.

通常我发现自己处于一个对象固有的常量,但需要多行初始化的情况.例如,我想要一个步幅是向量中未知的编译时元素数量的乘积:

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?

c++

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

最小二乘拟合正弦幂级数

我正在尝试适合形式的功能:

在此输入图像描述

其中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术语会导致溢出错误.这在函数本身中不是问题,因为这里单项式项乘以它们非常小的系数.

我的问题是:

  1. 我上面做了什么,代码有什么不对吗?
  2. 还是有其他问题吗?
  3. 如果我的假设是正确的,有没有办法预处理拟合函数,那么雅可比行为更好?也许我可以适应数据和时间的对数,或者其他东西. …

python numpy mathematical-optimization curve-fitting scipy

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