我有一个2d numpy数组.我想将每个条目的n个最近条目的平均值取,就像在一维数组上获得滑动平均值一样.最干净的方法是什么?
我有一个包含非特定数量元素的列表,但嵌套列表的每个第一个元素都是一个标识符,我想使用该标识符按顺序对列表进行排序
list = [['D', 'F', 'E', 'D', 'F', 'D'],['A', 'F', 'E', 'C', 'F', 'E'],['C', 'E', 'E', 'F', 'E', 'E'],['B', 'F', 'E', 'D', 'F', 'F']]
Run Code Online (Sandbox Code Playgroud)
经过排序
list = [['A', 'F', 'E', 'C', 'F', 'E'],['B', 'F', 'E', 'D', 'F', 'F'],['C', 'E', 'E', 'F', 'E', 'E'],['D', 'F', 'E', 'D', 'F', 'D']]
Run Code Online (Sandbox Code Playgroud)
我正在使用python 3.3.3
我正在解析Python 2.7中的一些日期时间字符串datetime.strptime.我想假设日期早于现在.
但strptime的%y运算符默认情况下不这样做:
d = '10/12/68'
n = datetime.strptime(d, '%d/%m/%y')
print n
2068-12-10 00:00:00
Run Code Online (Sandbox Code Playgroud)
有什么方法可以让我认为Python 68是1968常见的吗?
或者我应该只是解析字符串并插入19或20手动插入?
我不时面临这种困境。假设我有一个这样的函数:
def foo(..., **kwargs):
...
actor = make_actor(..., **a_kwargs)
return actor.act(..., **b_kwargs)
Run Code Online (Sandbox Code Playgroud)
我想让调用者指定要传递给make_actor()(a_kwargs) 和act()(b_kwargs) 的kwargs 。问题是,当然,foo只能采取**kwargs一次。
(在几乎所有情况下 a_kwargs 和 b_kwargs 不共享公共密钥,因此我们无需担心参数名称冲突)。
我可以想到几种方法,每种方法都有自己明显的缺点/限制。
def foo1(..., **kwargs):
...
a_kwargs = {k:kwargs.pop(k) for k in kwargs.keys() if k in ['arg1','arg2',...]}
actor = make_actor(..., **a_kwargs)
return actor.act(..., **kwargs)
def foo2(..., arg1=DEFAULT1, arg2=DEFAULT2, ..., **b_kwargs):
...
actor = make_actor(..., arg1=arg1, arg2=arg2, ...)
return actor.act(..., **b_kwargs)
def foo3(..., a_kwargs={}, **b_kwargs):
...
actor = make_actor(..., **a_kwargs)
return actor.act(..., **b_kwargs) …Run Code Online (Sandbox Code Playgroud) 我正在尝试编写一些代码来计算两组间隔A - B之间的差异,间隔端点是整数,但我很有希望得到有效的解决方案,任何建议都会得到很多赞赏的例子:[(1,4) ),(7,9)] - [(3,5)] = [(1,3),(7,9)]
这是迄今为止我尝试过的最好的(两个列表已经排序)
class tp():
def __repr__(self):
return '(%.2f,%.2f)' % (self.start, self.end)
def __init__(self,start,end):
self.start=start
self.end=end
z=[tp(3,5)] #intervals to be subtracted
s=[tp(1, 4)),tp(7, 9), tp(3,4),tp(4,6)]
for x in s[:]:
if z.end < x.start:
break
elif z.start < x.start and z.end > x.start and z.end < x.end:
x.start=z.end
elif z.start < x.start and z.end > x.end:
s.remove(x)
elif z.start > x.start and z.end < x.end:
s.append(tp(x.start,z.start))
s.append(tp(z.end,x.end))
s.remove(x)
elif z.start > x.start and z.start < …Run Code Online (Sandbox Code Playgroud) 我注意到涉及s和0 numpy.dot时nan的行为不一致.
任何人都可以理解它吗?这是一个错误吗?这是特定的dot功能吗?
我正在使用numpy v1.6.1,64bit,在linux上运行(也在v1.6.2上测试过).我还在windows 32bit上的v1.8.0上进行了测试(所以我不知道这些差异是由于版本,操作系统还是拱门).
from numpy import *
0*nan, nan*0
=> (nan, nan) # makes sense
#1
a = array([[0]])
b = array([[nan]])
dot(a, b)
=> array([[ nan]]) # OK
#2 -- adding a value to b. the first value in the result is
# not expected to be affected.
a = array([[0]])
b = array([[nan, 1]])
dot(a, b)
=> array([[ 0., 0.]]) # EXPECTED : array([[ nan, 0.]])
# (also happens in …Run Code Online (Sandbox Code Playgroud) 我正在为python 2.7编写一个电子邮件解析器,它将使用别名通过sendmail调用,使用电子邮件模块解析,然后处理并存储到oracle数据库中:
来自/ etc/aliases:
myalias:| /my/python/script.py
我无法将所有stdin"sl"到一个字符串对象中,我可以将其与电子邮件模块一起使用:
import email
# Slurp stdin and store into message
message =
msg = email.message_from_string(message)
# Do something with it
print msg['Subject']
Run Code Online (Sandbox Code Playgroud)
最有效的方法是什么?我已经尝试过stdin.readlines()但它最终成为一个列表.
感谢任何帮助.(对不起,如果这是noobish ...我是一个perl转换器,并被迫使用python标准化我的工具,这只是我的第二个脚本.好吧不是真的"强迫",我一直想要这样做一段时间但不是像现在这样的截止日期之枪
我有一个列表,我想按多个keys 排序,如:
L = [ ... ]
L.sort(key = lambda x: ( f(x), g(x) ))
Run Code Online (Sandbox Code Playgroud)
这很好用.但是,这会导致不必要的调用g,我想避免(因为可能很慢).换句话说,我想部分和懒惰地评估关键.
例如,如果f是唯一的L(即len(L) == len(set(map(f,L))))不g应该进行任何调用.
什么是最优雅/ pythonic的方式来做到这一点?
我能想到的一种方法是定义一个自定义cmp函数(L.sort(cmp=partial_cmp)),但IMO比使用key参数更不优雅和复杂.
另一种方法是定义一个key-wrapper类,它使用生成器表达式生成键的不同部分,并覆盖比较运算符以逐个比较.但是,我觉得必须有一个更简单的方法......
编辑:我对通过多个函数排序的一般问题的解决方案感兴趣,不仅如上面的例子中的两个.
它是一个Web挖掘脚本.
def printer(q,missing):
while 1:
tmpurl=q.get()
try:
image=urllib2.urlopen(tmpurl).read()
except httplib.HTTPException:
missing.put(tmpurl)
continue
wf=open(tmpurl[-35:]+".jpg","wb")
wf.write(image)
wf.close()
Run Code Online (Sandbox Code Playgroud)
q是一个Queue()由Urls组成的``缺少一个空队列来收集错误提升网址
它由10个线程并行运行.
每次我跑这个,我得到了这个.
File "C:\Python27\lib\socket.py", line 351, in read
data = self._sock.recv(rbufsize)
File "C:\Python27\lib\httplib.py", line 541, in read
return self._read_chunked(amt)
File "C:\Python27\lib\httplib.py", line 592, in _read_chunked
value.append(self._safe_read(amt))
File "C:\Python27\lib\httplib.py", line 649, in _safe_read
raise IncompleteRead(''.join(s), amt)
IncompleteRead: IncompleteRead(5274 bytes read, 2918 more expected)
Run Code Online (Sandbox Code Playgroud)
但我确实使用了except......我尝试过其他类似的东西
httplib.IncompleteRead
urllib2.URLError
Run Code Online (Sandbox Code Playgroud)
甚至,
image=urllib2.urlopen(tmpurl,timeout=999999).read()
Run Code Online (Sandbox Code Playgroud)
但这都不起作用..
我怎么能抓住IncompleteRead和URLError?
我正在使用mongodb的上限集合+ tailable游标作为pubsub引擎,使用pymongo.(这种方法在这里描述).我的环境包括几个主题,几个发布者和几十个订阅者.
这很有效,除了每隔一段时间我遇到插入操作,这需要花费很长时间才能完成.
我的理解是mongodb可以支持> 10K docs/sec的插入,这就是为什么我很惊讶单个插入操作可能需要85ms.(我在生产环境中也观察过几次> 1秒,但无法使用此SSCCE重现它).
为了将延迟降至最低,日记功能被禁用,并且我使用最低写入问题,这有助于,但没有解决问题.
是什么导致这种情况,我该如何解决?
这是一个SSCCE.我并行运行以下脚本两次:
import time, pymongo, pandas as pd
DBNAME = 'test5'
COLLNAME = 'abc'
mongo = pymongo.MongoClient()
#mongo[DBNAME].drop_collection(COLLNAME)
if DBNAME not in mongo.database_names():
coll = mongo[DBNAME].create_collection(COLLNAME,
capped = True, size = 50 * 1024 * 1024, max = 1024 * 1024,
fsync = False, # no delays please (FYI, journaling is disabled)
#autoIndexId = False,
)
tarr = []
for _ in range(1000):
msg …Run Code Online (Sandbox Code Playgroud)