我有一个有效"连续"传感器读数的数据集,偶尔会有间隙.
但是,有几个时期没有记录数据.这些差距明显长于样本期.
默认情况下,pyplot将每个数据点连接到下一个数据点(如果我有一个线型设置),但是当我连接长间隙两侧的两个数据点时,我觉得这有点误导.
我宁愿在那里没有线路; 也就是说,我希望线路停止并在差距后重新开始.
我已经尝试在这些间隙部分中添加一个带y值的元素None,但似乎将该行发送回绘图的前一部分(虽然奇怪的是这些行不会出现在所有缩放级别).
我想到的另一个选择是简单地用每个单独的调用来绘制plot,但这会有点丑陋和麻烦.
有更优雅的方式实现这一目标吗?
编辑:下面是一个演示行为的最小工作示例.第一个图是我试图避免的连接线.第二个图显示添加None值似乎有效,但是如果平移图的视图,则会得到第三个图中显示的内容,一条线跳到图的前面部分.
import numpy as np
import matplotlib.pyplot as plt
t1 = np.arange(0, 8, 0.05)
t2 = np.arange(10, 14, 0.05)
t = np.concatenate([t1, t2])
c = np.cos(t)
fig = plt.figure()
ax = fig.gca()
ax.plot(t, c)
ax.set_title('Undesirable joining line')
t1 = np.arange(0, 8, 0.05)
t2 = np.arange(10, 14, 0.05)
c1 = np.cos(t1)
c2 = np.cos(t2)
t = np.concatenate([t1, t1[-1:], t2])
c = np.concatenate([c1, [None,], c2])
fig = plt.figure() …Run Code Online (Sandbox Code Playgroud) 假设我有一个由多个域访问的网站,例如domain1.com和domain2.com.
如果我有相关链接,例如href="/wiki",那么无论我访问哪个域名,该链接都会将我带到正确的位置.
让我们说,我想使用wiki.domain1.com和wiki.domain2.com,有什么方法可以链接到这个相对于域名的链接?
如果没有,当多个域指向同一个服务器时,是否有一种优雅的方式来处理上面的wiki链接等链接?
我正在使用CMake来构建我的系统和我的单元测试.
我也在做一个源外构建.
我发现使用ADD_TEST()命令,您不需要安装测试可执行文件(它将在您运行make install时运行,这很棒).
但是,我的单元测试依赖于一些输入文件,这些文件需要复制到构建可执行文件的位置.
据我所知,我不能使用install()将文件复制一份,因为我还没有指定的地方还有就是-这取决于在构建命令被调用.
有什么方法可以告诉CMake将我的测试文件复制到它构建可执行文件的同一位置吗?
我一直遇到试图运行具有以下属性的线程的问题:
我见过的一个解决方案如下:
void class::run()
{
while(!exit_flag)
{
if (resource_ready)
use_resource();
}
}
Run Code Online (Sandbox Code Playgroud)
这满足第1,2和3点,但是忙碌的等待循环使用100%CPU.
一个潜在的解决方法是将睡眠声明放入:
void class::run()
{
while(!exit_flag)
{
if (resource_ready)
use_resource();
else
sleep(a_short_while);
}
}
Run Code Online (Sandbox Code Playgroud)
我们现在不打击CPU,所以我们解决了1和4,但是a_short_while当资源准备好或者我们被要求退出时,我们可以不必要地等待.
第三种选择是对资源进行阻塞读取:
void class::run()
{
while(!exit_flag)
{
obtain_resource();
use_resource();
}
}
Run Code Online (Sandbox Code Playgroud)
这将优雅地满足1,2和4,但是现在如果资源不可用,我们不能要求线程退出.
只要能够实现CPU使用率和响应性之间的权衡,最好的方法似乎是第二个,睡眠时间短.然而,这似乎仍然不是最理想的,对我来说也不优雅.这似乎是一个常见的问题需要解决.有更优雅的方式来解决它吗?有没有一种方法可以满足所有这四个要求?
我希望 vim 中的 textwidth 默认为 80,但如果特定文件类型有自己的文本宽度(特别是 tw=72 的 gitcommit),我希望 vim 遵守该宽度。
在我的 .vimrc 中,我有一行:
set tw=80
Run Code Online (Sandbox Code Playgroud)
我也试过
setlocal tw=80
Run Code Online (Sandbox Code Playgroud)
然而,这似乎覆盖了 72 的 gitcommit 宽度。
如果我删除该行,则 git commit 可以正常工作(在 72 处换行),但文本文件(例如)不会自动换行。
如果没有指定其他内容,是否可以将 vim 换行到 80,否则请遵循特定的文件类型说明?
顺便说一句,我认为这直到最近才有效。我曾尝试从我的 .virmrc 中删除所有其他内容,但设置 tw=80,但这没有任何区别。
编辑:如果我打开一个 git commit 消息编辑器,然后运行
:verbose set tw?
vim 显示:
textwidth=80
Last set from ~/.vimrc
Run Code Online (Sandbox Code Playgroud) 假设我正在编写一个包含C风格API的类.
int cstyleInit()
int cstyleCleanup()
Run Code Online (Sandbox Code Playgroud)
一般来说,方法是放入cstyleInit()我的构造函数和cstyleCleanup()析构函数中,但我的问题是,如何处理构造函数中的初始化失败?
简单的方法是这样的:
MyWrapper::MyWrapper() {
int ret = cstyleInit()
if (ret = FAILUREMODE1) {
cstyleCleanup();
throw exception("failure mode 1");
}
else if (ret = FAILUREMODE2) {
cstyleCleanup();
throw exception("failure mode 2");
}
...
}
Run Code Online (Sandbox Code Playgroud)
据我所知,这样可以正常工作.唯一(次要)的问题是你必须为每个失败模式显式调用cstyleCleanup(),这对我来说似乎不是很好.
我知道这是一个小问题,但有更多的c ++/RAII方式吗?