小编Ome*_*man的帖子

模板中类型别名的继承

看起来我在类之间继承了类型别名,而不是在类模板之间?我不明白为什么这段代码有效:

#include <iostream>

//template<typename T>
struct Test1
{
//    using t1=T;
    using t1=int;
};

//template<typename T>
struct Test2: public Test1//<T>
{
  t1 x;  
};

int main(int argc, char *argv[]) {
//    Test2<int> a;
    Test2 a;
    a.x=5;
    std::cout << a.x << std::endl;
}
Run Code Online (Sandbox Code Playgroud)

并且此代码不会:

#include <iostream>

template<typename T>
struct Test1
{
    using t1=T;
};

template<typename T>
struct Test2: public Test1<T>
{
  t1 x;  
};

int main(int argc, char *argv[]) {
    Test2<int> a;
    a.x=5;
    std::cout << a.x << std::endl;
}
Run Code Online (Sandbox Code Playgroud)

类型不通过模板继承吗?

c++ inheritance alias templates

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

matplotlib Animation.保存到动画 gif 非常慢

我正在对在 IPython 3.1 笔记本中模拟的收敛过程进行动画处理。我在 matplotlib 动画中可视化散点图结果,并通过 ImageMagick 将其写入动画 gif。有 3000 帧,每帧大约有 5000 个点。

我不确定 matplotlib 到底是如何创建这些动画文件的,但它似乎缓存了一堆帧,然后将它们全部写出来——当我查看 CPU 使用率时,它一开始由 python 主导,然后由最后转换。

写出 gif 的速度非常慢。在现代 MacBook Pro 上将 70MB 文件写入 SSD 需要一个多小时。“转换”相当于 4(8 个超线程)核心机器上一个核心的 90%。

写入前65MB大约需要15分钟,写入最后5MB需要2个多小时。

我认为代码中有趣的部分如下——如果还有其他有用的内容,请告诉我。

def updateAnim(i,cg,scat,mags):
    if mags[i]==0: return scat,
    cg.convergeStep(mags[i])
    scat.set_offsets(cg._chrgs[::2,0:2])
    return scat,

fig=plt.figure(figsize=(6,10))
plt.axis('equal')
plt.xlim(-1.2,1.2);plt.ylim(-1,3)
c=np.where(co._chrgs[::2,3]>0,'blue','red')
scat=plt.scatter(co._chrgs[::2,0],co._chrgs[::2,1],s=4,color=c,marker='o',alpha=0.25);
ani=animation.FuncAnimation(fig,updateAnim,frames=mags.size,fargs=(co,scat,mags),blit=True);
ani.save('Files/Capacitance/SpherePlateAnimation.gif',writer='imagemagick',fps=30);
Run Code Online (Sandbox Code Playgroud)

知道瓶颈可能是什么或者我如何加快速度吗?与模拟时间相比,我希望写出时间短一些。

版本:ImageMagick 6.9.0-0 Q16 x86_64 2015-05-30 http://www.imagemagick.org 版权所有:版权所有 (C) 1999-2014 ImageMagick Studio LLC 功能:DPC 模块代表(内置):bzlib cairo djvu fftw fontconfig freetype gslib gvc jbig jng jp2 jpeg lcms lqr …

python imagemagick matplotlib animated-gif

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

如何在 IPython 中重置 MathJax 设置?

我想更改 IPython 笔记本 (Jupyter) 中方程的格式,然后右键单击方程以调出 MathJax 菜单。我选择了 SVG 作为渲染类型。现在,我在笔记本中得到了原始乳胶。

问题是我无法恢复更改,因为我找不到任何 MathJax 输出可以右键单击!如何重置 MathJax 设置?

我试过使用 IPython.external.mathjax 重新安装 MathJax,但这没有用。我还尝试从 Safari 首选项中清除 MathJax 缓存,但没有成功。

[更新] 我注意到我在加载时从显示屏底部角落的 MathJax 收到两条消息。一个是“正在加载[MathJax]/extensions/Safe.js”,另一个是“文件加载失败:http://localhost:8888/static/components/MathJax/jax/output/SVG/config.js

我认为稍后必须参考我的 Anaconda IPython 安装中的路径,但根本没有 SVG 目录。

我如何让 MathJax 停止寻找那里?

sympy ipython mathjax ipython-notebook jupyter

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

如何在 Holoviews 中旋转元素

有没有办法在 Holoviews 中将绘图旋转 90°?

我有兴趣知道一般如何做到这一点,但我的直接目的是生成一个直方图,该直方图被旋转以将频率放在水平方向上,将关键值放在垂直方向上,以布局在散点旁边。

这可以用 .hist() 命令很好地完成,不幸的是,生成的对象 ( AdjointLayout) 不能嵌套在 a HoloMapor 中GridSpace,所以我只能使用自己的设备。

import numpy as np
import holoviews as hv
hv.extension('bokeh')

data1=np.random.randn(1000)
data2=np.random.rand(1000)

dataDict1={1:hv.Scatter(data1)+hv.Histogram(np.histogram(data1),kdims=['y']),
           2:hv.Scatter(data2)+hv.Histogram(np.histogram(data2),kdims=['y'])}

dataDict2={1:hv.Scatter(data1).hist(), 2:hv.Scatter(data2).hist()}

hv.HoloMap(dataDict1).collate()  #yay!
hv.HoloMap(dataDict2).collate()  #TypeError: HoloMap does not accept AdjointLayout type, data elements have to be a ('ViewableElement', 'NdMapping', 'Layout').
Run Code Online (Sandbox Code Playgroud)

我怀疑它是方括号中的%%optsor .opts()plot 选项之一,但我找不到记录的可用选项(链接要么已损坏,要么指向API 指南顶部,但我没有找到正确的部分API。)

python holoviews

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

如何使用通配符获取路径名字符串并使用pathlib解析glob?

如果我给一个字符串的路径,例如"〜/ pythoncode/*.py",那么将它全局化的最佳方法是什么pathlib

使用pathlib,有一种方法可以使用glob追加到路径:

p = pathlib.Path('~/pythoncode/').expanduser().glob('*.py')
Run Code Online (Sandbox Code Playgroud)

但是,例如,这不起作用,因为用户未展开:

p = pathlib.Path().glob('~/pythoncode/*.py')
Run Code Online (Sandbox Code Playgroud)

这会产生一个异常,因为我没有提供任何参数glob():

p = pathlib.Path('~/pythoncode/*.py').expanduser().glob()
Run Code Online (Sandbox Code Playgroud)

有没有办法做到这一点pathlib,或者我必须先解析字符串?

python glob python-3.x pathlib

5
推荐指数
2
解决办法
1992
查看次数

使Swift泛型与重载函数一起玩

我正在尝试构建一个MyStruct<T>可以使用Float或者Double用于内部存储的泛型类型.在初始化程序中,我传递了一个类型为T的参数(我打算将其作为Float或者Double).该初始化程序调用一些trig函数,如sin()cos().这两个函数都在系统库中重载以提供FloatDouble版本.

var f:Float=1.2
var d:Double=1.2

sin(f) //0.9320391
sin(d) //0.9320390859672263
Run Code Online (Sandbox Code Playgroud)

麻烦的是,我不能在我的通用结构中使用它们.精简案例如下所示:

struct MyStruct<T> {
    var v:T

    init(x:T){v=sin(x)}
}
Run Code Online (Sandbox Code Playgroud)

因为:

Playground执行失败:Untitled Page.xcplaygroundpage:9:17:error:无法使用类型'(T)'init(x:T){v = sin(x)}的参数列表调用'sin'

Untitled Page.xcplaygroundpage:9:17:注意:这些部分匹配的参数列表存在'sin'的重载:(Float),(Double)init(x:T){v = sin(x)}

看起来应该有办法让这项工作,但感觉很像这种情况.评论表明没有办法要求存在全球功能.

我可以通过使用如下构造强制这种情况:

init(x:T){v=T(sin(Double(x)))}
Run Code Online (Sandbox Code Playgroud)

并且对T施加约束,它可以从a构造Double,但这似乎打败了制作Float结构版本的目的,这是为了减少在关键代码循环中使用它时的计算工作量.

如果sin()在库中将其定义为通用函数而不是重载函数,感觉会更容易:

func sin<T:FloatingPointType> (x:T) -> T
Run Code Online (Sandbox Code Playgroud)

但是它就是这样啊.

有没有办法让我在标准库之上构建一个Float/Double不可知的库,而不会增加很多开销?

generics swift

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

swift计算属性getter可以改变结构吗?

我有一个结构包装var data:[T],它还提供内部数组的一些统计信息.一个统计量是最大值,这可能是一个昂贵的操作,因为它需要搜索每个元素来确定最大值 - 所以我想缓存最大值,只有在需要时才重新计算:

private mutating func getMax()->T? {
    if let m=maxValue {
        return m
    }
    else if data.count>0 {
        maxValue=data.maxElement()
        return maxValue
    }
    else {
        return nil
    }
}
Run Code Online (Sandbox Code Playgroud)

这似乎可以作为一种方法正常工作,但我无法弄清楚如何做与计算属性相同的事情.

var max:T? {return getMax()}
Run Code Online (Sandbox Code Playgroud)

因为getMax()正在变异(实际上我将getMax代码放入属性访问器中,但是更容易在此处不重写代码),因此导致访问者需要标记为"变异"的投诉.

Xcode建议我这样重写代码:

var max:T? mutating {return getMax()}
Run Code Online (Sandbox Code Playgroud)

然后标记另一个问题,Xcode建议在变异之前加一个分号,这会导致建议在变异后再添加一个分号,然后在变异后再添加一个分号,很明显编译器甚至没有尝试帮助,只是有一个分号迷信.

有没有办法写一个允许缓存值的计算属性,还是我坚持把它写成一个方法?

swift computed-properties

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

减去多个列并在pandas DataFrame中附加结果

我有一张传感器数据表,其中一些列是测量值,一些列是传感器偏差.例如,像这样:

df=pd.DataFrame({'x':[1.0,2.0,3.0],'y':[4.0,5.0,6.0],
                 'dx':[0.25,0.25,0.25],'dy':[0.5,0.5,0.5]})
Run Code Online (Sandbox Code Playgroud)
    dx   dy    x    y
0  0.25  0.5  1.0  4.0
1  0.25  0.5  2.0  5.0
2  0.25  0.5  3.0  6.0
Run Code Online (Sandbox Code Playgroud)

我可以通过从测量中减去偏差来向表中添加一列,如下所示:

df['newX'] = df['x'] - df['dx']
Run Code Online (Sandbox Code Playgroud)
    dx   dy    x    y  newX
0  0.25  0.5  1.0  4.0  0.75
1  0.25  0.5  2.0  5.0  1.75
2  0.25  0.5  3.0  6.0  2.75
Run Code Online (Sandbox Code Playgroud)

但我想立刻为许多专栏做这件事.这不起作用:

df[['newX','newY']] = df[['x','y']] - df[['dx','dy']]
Run Code Online (Sandbox Code Playgroud)

看来有两个原因.

  • 当减去DataFrames时,列标签用于对齐减法,因此最终得出4列结果['x', 'y', 'dx', 'dy'].
  • 我似乎可以使用索引将单个列插入到DataFrame中,但不能超过一个.

显然,我可以遍历列并单独执行每个列,但有没有更紧凑的方法来完成我想要做的事情,这更像是一列解决方案?

python pandas

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