我对这段Python代码有疑问:
import matplotlib
matplotlib.use("Agg")
import numpy as np
import pylab as pl
A1=np.loadtxt('/tmp/A1.txt',delimiter=',')
A1_extrema = [min(A1),max(A1)]
A2=np.loadtxt('/tmp/A2.txt',delimiter=',')
pl.close()
ab = np.polyfit(A1,A2,1)
print ab
fit = np.poly1d(ab)
print fit
r2 = np.corrcoef(A1,A2)[0,1]
print r2
pl.plot(A1,A2,'r.', label='TMP36 vs. DS18B20', alpha=0.7)
pl.plot(A1_extrema,fit(A1_extrema),'c-')
pl.annotate('{0}'.format(r2) , xy=(min(A1)+0.5,fit(min(A1))), size=6, color='r' )
pl.title('Sensor correlations')
pl.xlabel("T(x) [degC]")
pl.ylabel("T(y) [degC]")
pl.grid(True)
pl.legend(loc='upper left', prop={'size':8})
pl.savefig('/tmp/C123.png')
Run Code Online (Sandbox Code Playgroud)
A1和A2是包含来自不同传感器的温度读数的阵列.我想找到两者之间的相关性并以图形方式显示.但是,偶尔会发生传感器读取错误.在这种情况下,将NaN插入其中一个文件而不是温度值.然后np.polyfit拒绝适合数据并返回[nan, nan]结果.之后所有其他都失败了.
我的问题:我如何说服numpy.polyfit忽略NaN值?注意:数据集目前相对较小.我希望它们一旦部署就可能增长到大约200k ... 600k元素.
我有一个像这样开始的pythonscript:
#!/usr/bin/env python
import matplotlib
matplotlib.use("Agg")
from matplotlib.dates import strpdate2num
import numpy as np
import pylab as pl
from cmath import rect, phase
Run Code Online (Sandbox Code Playgroud)
它就像一个魅力,但我的编辑抱怨道:E402 module level import not at top of file [pep8].
如果我matplotlib.use("Agg")向下移动,脚本将无法正常工作.
我应该忽略错误吗?或者有办法解决这个问题吗?
编辑:我知道PEP8说这只是一个建议,它可能会被忽略,但我希望有一个很好的方法来初始化模块而不破坏PEP8指南,因为我不认为我可以让我编辑器在每个文件的基础上忽略此规则.
EDIT2:我正在使用Atom和linter-pylama
我有一些Python程序,希望将其转换为C ++ 11代码,作为学习该语言的一种方式。目标平台是Debian,内核版本> = 4.2(即systemd)。
在Python中,我可以使用syslog模块将调试/日志记录信息记录到系统日志中。在CI就能#include <syslog.h>。但是,从本文中我了解到,对于当前的C ++实现,现在没有这样的实现。如果程序是服务(或守护程序?),这显然会自动发生,尽管我没有收集如何区分消息优先级。
我已经在Google周围搜索了,但是找不到真正的解决方案:如何从C ++ 11程序中将信息发送到系统日志?
编辑:(伸出双手并放弃;-))由于似乎没有本机解决方案,而且我仍处于学习C ++的开始阶段,所以我现在考虑使用C iso C ++由于C本机支持syslog.h。
我正在努力实施rrdtool. 我已经阅读了各种教程并启动并运行了我的第一个数据库。但是,有一点我不明白。
让我困惑的是,为什么我遇到的这么多示例都指示我创建多个 RRA?
请允许我解释一下:假设我有一个想要监控的传感器。我最终希望看到每小时、每天、每周和每月的传感器数据图表,以及一个跨越(我对此仍持观望态度)大约 1.5 年的图表(用于可视化季节性影响)。
现在,为什么我要为每个视图创建 RRA?为什么不直接创建一个像这样的数据库(步长=300秒):
DS:sensor:GAUGE:600:U:U \
RRA:AVERAGE:0.5:1:160000
Run Code Online (Sandbox Code Playgroud)
如果我理解正确,我就可以在任何给定时间段内以我需要的任何分辨率创建任何我想要的图表。人们告诉我需要定义的所有其他 RRA 有什么用?
顺便说一句:我可以想象,在过去,当计算能力更加稀有时,这会很有帮助。如今,有了快速磁盘、高速接口和强大的 CPU,我想您不再需要 RRA 所设计的那种预处理。
编辑:我知道这个页面。尽管它非常清楚地解释了合并,但我的理解是,rrdtool graph在绘制数据图表时也可以进行此合并。(对我来说)“收获期整合”似乎仍然没有附加值。
我正在使用带有 Debian Linux 的 Raspberry Pi 1B+:
Linux rbian 3.18.0-trunk-rpi #1 PREEMPT Debian 3.18.5-1~exp1+rpi16 (2015-03-28) armv6l GNU/Linux
Run Code Online (Sandbox Code Playgroud)
作为更大的 Python 程序的一部分,我使用了以下代码:
#!/usr/bin/env python
import time
from urllib2 import Request, urlopen
from bs4 import BeautifulSoup
_url="http://xml.buienradar.nl/"
s1 = time.time()
req = Request(_url)
print "Request = {0}".format(time.time() - s1)
s2 = time.time()
response = urlopen(req)
print "URLopen = {0}".format(time.time() - s2)
s3 = time.time()
output = response.read()
print "Read = {0}".format(time.time() - s3)
s4 = time.time()
soup = BeautifulSoup(output)
print "Soup (1) = …Run Code Online (Sandbox Code Playgroud) 我有这个脚本:
#!/bin/bash
list="a b c d"
for item in ${list[@]}; do
echo "${item}"
done
Run Code Online (Sandbox Code Playgroud)
当我运行它时,这是输出:
a
b
c
d
Run Code Online (Sandbox Code Playgroud)
这正是我想要的.但是,shellcheck讨厌这个并抛出一个错误:
for item in ${list[@]}; do
^-- SC2068: Double quote array expansions to avoid re-splitting elements.
Run Code Online (Sandbox Code Playgroud)
但是,当我双引号变量时,脚本的输出更改为:
a b c d
Run Code Online (Sandbox Code Playgroud)
这不是我想要的.
shellcheck是否正确,我应该修改我尝试从变量中提取项目的方式,但是如何?或者我应该告诉shellcheck忽略这一点?