在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?
我有一个返回多行字符串的 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) 是否有一种简单的方法可以将预处理器/宏处理器与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).
有任何想法吗?