小编Ale*_*lex的帖子

在线图中设置间隙/中断

我有一个有效"连续"传感器读数的数据集,偶尔会有间隙.

但是,有几个时期没有记录数据.这些差距明显长于样本期.

默认情况下,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)

python matplotlib

11
推荐指数
1
解决办法
6501
查看次数

如何在HTML中引用相对子域?

假设我有一个由多个域访问的网站,例如domain1.comdomain2.com.

如果我有相关链接,例如href="/wiki",那么无论我访问哪个域名,该链接都会将我带到正确的位置.

让我们说,我想使用wiki.domain1.comwiki.domain2.com,有什么方法可以链接到这个相对于域名的链接?

如果没有,当多个域指向同一个服务器时,是否有一种优雅的方式来处理上面的wiki链接等链接?

html subdomain hyperlink

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

CMake如何使用单元测试安装测试文件

我正在使用CMake来构建我的系统和我的单元测试.

我也在做一个源外构建.

我发现使用ADD_TEST()命令,您不需要安装测试可执行文件(它将在您运行make install时运行,这很棒).

但是,我的单元测试依赖于一些输入文件,这些文件需要复制到构建可执行文件的位置.

据我所知,我不能使用install()将文件复制一份,因为我还没有指定的地方还有就是-这取决于在构建命令被调用.

有什么方法可以告诉CMake将我的测试文件复制到它构建可执行文件的同一位置吗?

unit-testing cmake

7
推荐指数
3
解决办法
3952
查看次数

优雅地退出无限循环线程

我一直遇到试图运行具有以下属性的线程的问题:

  1. 在无限循环中运行,检查一些外部资源,例如来自网络或设备的数据,
  2. 迅速从其资源获取更新,
  3. 当被要求时,及时退出,
  4. 有效地使用CPU.

第一种方法

我见过的一个解决方案如下:

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使用率和响应性之间的权衡,最好的方法似乎是第二个,睡眠时间短.然而,这似乎仍然不是最理想的,对我来说也不优雅.这似乎是一个常见的问题需要解决.有更优雅的方式来解决它吗?有没有一种方法可以满足所有这四个要求?

c++ multithreading

7
推荐指数
2
解决办法
3391
查看次数

在 vim 中设置 textwidth 而不覆盖特定的文件类型

我希望 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)

vim word-wrap

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

如何清理失败的构造函数

假设我正在编写一个包含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方式吗?

c++ raii

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