我遇到了Python的Numpy,set和NaN(非数字)的不可预知的行为:
>>> set([np.float64('nan'), np.float64('nan')])
set([nan, nan])
>>> set([np.float32('nan'), np.float32('nan')])
set([nan, nan])
>>> set([np.float('nan'), np.float('nan')])
set([nan, nan])
>>> set([np.nan, np.nan])
set([nan])
>>> set([float('nan'), float('nan')])
set([nan, nan])
Run Code Online (Sandbox Code Playgroud)
这里np.nan产生一个单独的元素集,而Numpy的nans产生一组中的多个nans.浮动('nan')也是如此!请注意:
>>> type(float('nan')) == type(np.nan)
True
Run Code Online (Sandbox Code Playgroud)
我想知道这种差异是如何产生的,以及不同行为背后的理性是什么.
随着最近的升级,我现在遇到一个严重的问题,SyntaxError: invalid syntax
当启动笔记本的python2.7实例时$ ipython2 notebook
.
该错误似乎源于tornado
使用ayncio
和在该库中有python3.4语法.
我可以开始$ ipython3 notebook
,但我正在使用的应用程序正在使用mayavi
我认为仍然只用于python2.
令人讨厌的错误消息是:
$ ipython2 notebook
Traceback (most recent call last):
File "/usr/local/bin/ipython2", line 11, in <module>
sys.exit(start_ipython())
File "/usr/local/lib/python2.7/dist-packages/IPython/__init__.py", line 118, in start_ipython
return launch_new_instance(argv=argv, **kwargs)
File "/usr/local/lib/python2.7/dist-packages/traitlets/config/application.py", line 591, in launch_instance
app.initialize(argv)
File "<string>", line 2, in initialize
File "/usr/local/lib/python2.7/dist-packages/traitlets/config/application.py", line 75, in catch_config_error
return method(app, *args, **kwargs)
File "/usr/local/lib/python2.7/dist-packages/IPython/terminal/ipapp.py", line 305, in initialize
super(TerminalIPythonApp, self).initialize(argv)
File "<string>", line …
Run Code Online (Sandbox Code Playgroud) 为什么Pandas在这段代码中将我的numpy float32强制转换为float64:
>>> import pandas as pd
>>> import numpy as np
>>> df = pd.DataFrame([[1, 2, 'a'], [3, 4, 'b']], dtype=np.float32)
>>> A = df.ix[:, 0:1].values
>>> df.ix[:, 0:1] = A
>>> df[0].dtype
dtype('float64')
Run Code Online (Sandbox Code Playgroud)
这个行为对我来说似乎很奇怪,不知道它是不是一个bug.我在Pandas版本0.17.1(更新的PyPI版本)上,我注意到最近有一些强制错误,请参阅https://github.com/pydata/pandas/issues/11847.我没有尝试使用更新的GitHub主代码.
这是一个错误还是我误解了熊猫的某些"功能"?如果它是一个功能,那么我该如何解决它?
(胁迫问题涉及我最近询问的有关Pandas任务性能的问题:使用float32和float64慢速分配Pandas DataFrame)
我发现自己无法在 Python 中打开新文件。当我检查时,ls -l /proc/PID/fd
我看到为 Python 进程打开了大量文件。我正在使用的模块显然是打开了很多文件而不是关闭它们。
我原以为我可以通过删除与打开文件的模块关联的对象来关闭文件,但什么也没发生。
我还期待在垃圾收集中的某处看到文件对象,但我没有看到任何类似于打开文件的内容:
for obj in gc.get_objects():
if hasattr(obj, 'read'):
print(obj)
Run Code Online (Sandbox Code Playgroud)
当我退出 Python 时,这些文件消失了。
我有一个查询,我用年份分组来计算。在某些年份中,没有可计算的项目,因此没有结果。我想让 SPARQL 在这些年中返回零计数。
我正在使用 Wikidata 查询服务https://query.wikidata.org,我目前的解决方案是制作一系列值并与实际查询进行联合。对我来说看起来有点笨拙。有没有更好的办法?
#defaultView:BarChart
select ?year ?number_of_pages ?work_label where {
{
select ?year (sample(?pages) as ?number_of_pages) ?work_label
where {
{
select * where {
values (?year ?pages ?work_label) {
("2000" "0"^^xsd:integer "_")
("2001" "0"^^xsd:integer "_")
("2002" "0"^^xsd:integer "_")
("2003" "0"^^xsd:integer "_")
("2004" "0"^^xsd:integer "_")
("2005" "0"^^xsd:integer "_")
("2006" "0"^^xsd:integer "_")
("2007" "0"^^xsd:integer "_")
("2008" "0"^^xsd:integer "_")
("2009" "0"^^xsd:integer "_")
("2010" "0"^^xsd:integer "_")
("2011" "0"^^xsd:integer "_")
("2012" "0"^^xsd:integer "_")
("2013" "0"^^xsd:integer "_")
("2014" "0"^^xsd:integer "_")
("2015" …
Run Code Online (Sandbox Code Playgroud) 是否可以在SPARQL中反转字符串,所以“ abc”变为“ cba”。可替代地,可以基于相反的字符串排序。
我对在Wikidata Query Service上可以使用的解决方案特别感兴趣。