小编Jus*_*tin的帖子

在MATLAB中缓慢的NaN关系比较

MATLAB R2013a(版本8.1)中,对NaN进行数值关系运算(大于,小于)比在非NaN上慢10倍.

>> a = rand(10000);
>> b = NaN(size(a));

>> tic; a>0; toc
Elapsed time is 0.083838 seconds.

>> tic; b>0; toc
Elapsed time is 0.991742 seconds.
Run Code Online (Sandbox Code Playgroud)

一些实验显示了阵列中NaNs的推进所需的时间尺度,使得所有NaN的阵列花费最长并且所有非NaN最快.Infs和非NaNs一样快.

我正在对具有大量NaN的阵列进行比较.为了解决这个减速问题,我正在用Infs替换我的数组中的NaN(例如,-Inf如果我做b> 0).这有帮助,但替换本身很慢.事实上,这只是因为我在同一阵列上做了很多这样的比较,一次性替换对整体有帮助.

所以我的问题是,有没有人有更好的想法来比较大量的NaNs?

matlab

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

Python doctest中的多行字符串输出

我有一个返回多行字符串的 Python3 函数。我想用 doctest 测试它,但无法让它工作。我尝试使用该+NORMALIZE_WHITESPACE 指令但没有成功。

def dummy():
    """Dummy test function

    >>> dummy()  # doctest: +NORMALIZE_WHITESPACE
    '''Hello Mum
    Hello Dad'''
    """
    return """Hello Mum
    Hello Dad"""

if __name__ == "__main__":
    import doctest
    doctest.testmod()
Run Code Online (Sandbox Code Playgroud)

上面的代码失败并出现以下错误:

File "c:/foo.py", line 5, in __main__.dummy
Failed example:
    dummy()  # doctest: +NORMALIZE_WHITESPACE
Expected:
    '''Hello Mum
    Hello Dad'''
Got:
    'Hello Mum\n    Hello Dad'
Run Code Online (Sandbox Code Playgroud)

我尝试更改 doctest 行以包含文字,\n如下所示:

>>> dummy()  # doctest: +NORMALIZE_WHITESPACE
'Hello Mum\n    Hello Dad'
Run Code Online (Sandbox Code Playgroud)

但这失败了,并出现几乎相同的错误:

Failed example:
    dummy()  # doctest: +NORMALIZE_WHITESPACE
Expected: …
Run Code Online (Sandbox Code Playgroud)

python doctest python-3.x

8
推荐指数
2
解决办法
3502
查看次数

YAML预处理器/宏处理器

是否有一种简单的方法可以将预处理器/宏处理器与YAML文件一起使用?(即我正在考虑C预处理器的内容)?

我们有很多描述各种数据结构的平面文本文件.它们目前采用我们自己的内部格式,并使用内部解析器进行读取.我想切换到YAML文件,以利用各种预先存在的库进行读写.

但是我们的文件是分层的,因为我们将主文件"包含"到子文件中,并且使用变量替换生成新的数据结构.

作为一个玩具示例,我想要的东西如下:

country_master.yaml

name: $COUNTRY$
file: C:\data\$COUNTRY$
Run Code Online (Sandbox Code Playgroud)

UK_country.yaml

#define $COUNTRY$ UK
#include <country_master.yaml>
Run Code Online (Sandbox Code Playgroud)

USA_country.yaml

#define $COUNTRY$ USA
#include <country_master.yaml>
Run Code Online (Sandbox Code Playgroud)

然后在预处理之后我们得到类似的东西:

name: USA
file: C:\data\USA
Run Code Online (Sandbox Code Playgroud)

C预处理器不能使用YAML注释中使用的#字符.另外,理想情况下我们希望有一个由预处理器扩展的循环,所以在上面的例子中我们创建了一个带有循环的UK和USA(我不相信你可以循环cpp).

有任何想法吗?

preprocessor yaml

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

标签 统计

doctest ×1

matlab ×1

preprocessor ×1

python ×1

python-3.x ×1

yaml ×1