我通常从numpy的einsum函数中获得了很好的表现(我喜欢它的语法).@Ophion对这个问题的回答表明 - 对于测试的案例 - einsum始终优于"内置"功能(有时候会有一些,有时会很多).但我刚遇到一个einsum慢得多的情况.考虑以下等效函数:
(M, K) = (1000000, 20)
C = np.random.rand(K, K)
X = np.random.rand(M, K)
def func_dot(C, X):
Y = X.dot(C)
return np.sum(Y * X, axis=1)
def func_einsum(C, X):
return np.einsum('ik,km,im->i', X, C, X)
def func_einsum2(C, X):
# Like func_einsum but break it into two steps.
A = np.einsum('ik,km', X, C)
return np.einsum('ik,ik->i', A, X)
Run Code Online (Sandbox Code Playgroud)
我希望func_einsum跑得最快,但这不是我遇到的.在具有超线程,numpy版本1.9.0.dev-7ae0206的四核CPU上运行,以及使用OpenBLAS进行多线程处理,我得到以下结果:
In [2]: %time y1 = func_dot(C, X)
CPU times: user 320 ms, sys: 312 ms, total: 632 …Run Code Online (Sandbox Code Playgroud) 我有一个带有ENTRYPOINT的Dockerfile,它使用一个ENV变量.我无法获得ENTRYPOINT结构,因此容器也可以接受其他命令行参数.这是Dockerfile的相关部分:
ARG MODULE_NAME
ENV MODULE_NAME=$MODULE_NAME
ENTRYPOINT /usr/bin/python3 -m ${MODULE_NAME}
Run Code Online (Sandbox Code Playgroud)
如果我只想在没有其他参数的情况下启动容器,那就可以正常工作:
docker run my-image
Run Code Online (Sandbox Code Playgroud)
但我需要能够将其他命令行参数(例如," - debug"标志)传递给python进程,如下所示:
docker run my-image --debug
Run Code Online (Sandbox Code Playgroud)
使用上面的ENTRYPOINT形式," - debug"arg不会传递给python进程.我已经尝试了ENTRYPOINT的exec形式和shell形式,但无法使它与ENV变量和命令行args一起使用.我试过的其他几种形式:
这会运行,但不接受其他参数:
ENTRYPOINT ["/bin/bash", "-c", "/usr/bin/python3 -m ${MODULE_NAME}"]
Run Code Online (Sandbox Code Playgroud)
这给出了"/ usr/bin/python3:没有名为$ {MODULE_NAME}的模块":
ENTRYPOINT ["/usr/bin/python3", "-m ${MODULE_NAME}"]
Run Code Online (Sandbox Code Playgroud)
这给出了"/ usr/bin/python3:没有名为$ {MODULE_NAME}的模块":
ENTRYPOINT ["/usr/bin/python3", "-m", "${MODULE_NAME}"]
Run Code Online (Sandbox Code Playgroud) 我有兴趣使用Spectral Python (SPy) 来可视化和分类多波段栅格 GeoTIFF(不是高光谱数据)。目前看来只有.lan文件.gis格式是可读的。
我尝试将文件转换为.lanwith gdal_translate,但不支持图像格式( IOError: Unable to determine file type or type not supported)。
知道如何将该库用于非超光谱数据集吗?