我的python脚本(python 3.4.3)通过子进程调用bash脚本:
import subprocess as sp
res = sp.check_output("bashscript", shell=True)
Run Code Online (Sandbox Code Playgroud)
该bashscript包含以下行:
ssh -MNf somehost
Run Code Online (Sandbox Code Playgroud)
这将打开与某个远程主机的共享主连接,以允许一些后续操作.
执行python脚本时,它将提示该ssh行的密码,但在输入密码后它会阻塞,并且永远不会返回.当我按ctrl-C终止脚本时,我看到连接已正确建立(因此ssh行已成功执行).
使用时,我没有这个阻塞问题check_call,而不是check_output,但check_call不检索标准输出.我想了解究竟是什么导致阻塞行为check_output,可能与某些微妙的相关ssh -MNf.
我刚刚将pandas从0.17.1更新到0.21.0以利用一些新的功能,并遇到matplotlib的兼容性问题(我也更新到最新的2.1.0).特别是,Timestamp对象似乎发生了显着变化.
我碰巧有另一台机器仍在运行旧版本的pandas(0.17.1)/ matplotlib(1.5.1),我曾用它来比较差异:
两个版本都显示我的DataFrame索引 dtype='datetime64[ns]
DatetimeIndex(['2017-03-13', '2017-03-14', ... '2017-11-17'], type='datetime64[ns]', name='dates', length=170, freq=None)
Run Code Online (Sandbox Code Playgroud)
但是在打电话时type(df.index[0]),0.17.1给出pandas.tslib.Timestamp,0.21.0给出pandas._libs.tslib.Timestamp.
当用df.indexx轴绘图时:
plt.plot(df.index, df['data'])
Run Code Online (Sandbox Code Playgroud)
默认情况下,matplotlibs将x轴标签格式化为pandas 0.17.1的日期,但无法识别pandas 0.21.0并简单地给出原始数字1.5e18(以纳秒为单位的纪元时间).
我还有一个自定义游标,通过使用matplotlib.dates.DateFormatter对于0.21.0失败的x值来报告图表上的点击位置:
OverflowError: signed integer is greater than maximum
Run Code Online (Sandbox Code Playgroud)
我可以在调试中看到,报告的x值约为736500(即自0年以来的日数)为0.17.1但约为1.5e18(即纳秒时间段)为0.21.0.
我对matplotlib和熊猫之间的兼容性中断感到惊讶,因为它们显然是大多数人一起使用的.我是否错过了上面为新版本调用上述情节功能的方式?
更新如上所述,我更喜欢直接plot使用给定的轴对象调用,但仅仅是为了它,我尝试调用DataFrame本身的plot方法df.plot().完成此操作后,所有后续绘图都会正确识别同一python会话中的时间戳.就像设置了一个环境变量一样,因为我可以重新加载另一个DataFrame或创建另一个轴,subplots而不1.5e18显示在哪里.这真的闻起来像一个臭虫,因为最新的熊猫医生说熊猫:
The plot method on Series and DataFrame is just a simple wrapper around plt.plot()
Run Code Online (Sandbox Code Playgroud)
但很明显它对python会话做了一些事情,以便后续的图正确地处理Timestamp索引.
实际上,只需在上面的pandas链接中运行示例:
import pandas as pd
import numpy as np …Run Code Online (Sandbox Code Playgroud) 当尝试使用[]访问std :: unordered_map的成员时,出现错误:
尝试获取不在内存中的值的地址.
有一个很好的gdb-stl-views,除了它不支持unordered_map.
有没有一种同样好的方法来通过键检索unordered_map的成员?
在 Linux (CentOS) 上,我偶尔会-Wl,--unresolved-symbols=ignore-in-object-files在构建仅依赖于某些对象文件的一部分的测试应用程序时使用,即使完整的依赖关系需要包含更多的对象文件。关键是,我知道在设计上,运行测试应用程序时永远不会遇到任何未解析的符号(否则它应该崩溃)。
在 OS X 上,我发现类似的选项-Wl,-undefined,suppress (or warning, dynamic_lookup),-flat_namespace允许我构建二进制文件,但它在运行时失败,抱怨dyld: Symbol not found: ...即使在运行期间从未使用丢失的符号(相同的应用程序在 CentOS 上运行得很好)。
是否还有其他方法可以像在 Linux 上一样强制应用程序运行(直到遇到未解析的符号时崩溃)?
当 numpy.apply_along_axis 将一维数组作为输入时会发生什么?当我在一维数组上使用它时,我看到了一些奇怪的东西:
y=array([1,2,3,4])
Run Code Online (Sandbox Code Playgroud)
第一次尝试:
apply_along_axis(lambda x: x > 2, 0, y)
apply_along_axis(lambda x: x - 2, 0, y)
Run Code Online (Sandbox Code Playgroud)
返回:
array([False, False, True, True], dtype=bool)
array([-1, 0, 1, 2])
Run Code Online (Sandbox Code Playgroud)
但是,当我尝试:
apply_along_axis(lambda x: x - 2 if x > 2 else x, 0, y)
Run Code Online (Sandbox Code Playgroud)
我收到一个错误:
The truth value of an array with more than one element is ambiguous. Use a.any() or a.all()
Run Code Online (Sandbox Code Playgroud)
我当然可以使用列表理解然后转换回数组,但这看起来很复杂,我觉得当应用于一维数组时我缺少关于 apply_along_axis 的一些东西。
更新:根据 Jeff G 的回答,我的困惑源于这样一个事实,即对于只有一个轴的一维数组,传递给函数的实际上是一维数组本身而不是单个元素。
“numpy.where”对于我选择的示例显然更好(并且不需要 apply_along_axis),但我的问题实际上是关于将通用函数(采用一个标量并返回一个标量)应用于数组的每个元素的正确习惯用法(除了列表理解),类似于 pandas.Series.apply (或地图)的东西。我知道“矢量化”,但它似乎并不比列表理解更笨拙。