我开始使用matplot并管理一些基本情节,但现在我发现很难发现如何做我现在需要的东西:(
我的实际问题是如何将一个全局标题和全局图例放在带有子图的图形上.
我正在做2x3子图,我有很多不同颜色的图(大约200个).为了区分(大多数)我写的东西
def style(i, total):
return dict(color=jet(i/total),
linestyle=["-", "--", "-.", ":"][i%4],
marker=["+", "*", "1", "2", "3", "4", "s"][i%7])
fig=plt.figure()
p0=fig.add_subplot(321)
for i, y in enumerate(data):
p0.plot(x, trans0(y), "-", label=i, **style(i, total))
# and more subplots with other transN functions
Run Code Online (Sandbox Code Playgroud)
(对此有何看法?:))每个子图都有相同的样式功能.
现在我正试图获得所有子图的全局标题,以及解释所有样式的全球传奇.此外,我需要使字体很小,以适应那里的所有200种样式(我不需要完全独特的样式,但至少有一些尝试)
有人可以帮我解决这个任务吗?
你能想出一个很好的方法(可能用itertools)将迭代器拆分成给定大小的块吗?
因此l=[1,2,3,4,5,6,7]与chunks(l,3)变成一个迭代[1,2,3], [4,5,6], [7]
我可以想到一个小程序来做这个,但不是一个很好的方式可能itertools.
什么之间的区别UserDict,dict并ABC和建议哪一种?文档似乎已经弃用了UserDict?
似乎UserDict update()会使用我的setitem方法,而dict不是?在我想要自定义setitem和getitem功能的情况下,哪些方法是非常重要的?
使用ABCs我必须实现绝对所有方法,因为它没有提供默认实现?
我想做一dict件事做两件事:
intern() 所有键和值所以其中UserDict,dict并ABC能最好地让我做到这一点?
我写了一些包装器,它有另一个对象作为属性.此包装代理(向前)所有的属性与请求__getattr__和__setattr__存储作为属性的对象.我还需要为我的代理提供什么,以便在通常情况下包装器看起来像包装类?
我想我需要修复诸如继承之类的东西,也许__repr__,......我还需要处理什么,以及如何修复继承以便instanceof()有效?
编辑:我尝试制作一个功能代理,但由于我不完全理解配方,它失败了:(
setattr_=object.__setattr__
getattr_=object.__getattribute__
class Proxy(object):
__slots__=["_func", "_params", "_kwargs", "_obj", "_loaded", "__weakref__"]
def __init__(self, func, *params, **kwargs):
setattr_(self, "_func", func)
setattr_(self, "_params", params)
setattr_(self, "_kwargs", kwargs)
setattr_(self, "_obj", None)
setattr_(self, "_loaded", False)
def _get_obj(self):
if getattr_(self, "_loaded")==False:
print("Loading")
setattr_(self, "_obj", getattr_(self, "_func")(*getattr_(self, "_params"), **getattr_(self, "_kwargs")))
setattr_(self, "_loaded", True)
return getattr_(self, "_obj")
#
# proxying (special cases)
#
def __getattribute__(self, name):
return getattr(getattr_(self, "_get_obj")(), name)
def __delattr__(self, name):
delattr(getattr_(self, "_get_obj")(), name)
def …Run Code Online (Sandbox Code Playgroud) 我想在一个情节中绘制很多图表.我刚刚开始使用matplotlib并且无法找到一种很好的方法来生成许多可区分的颜色:(也许最好在SV上使用SV循环?
我在想类似的东西
args=[]
for i,(x,y) in enumerate(data):
args.extend([x,y,hsv(i)])
plot(*args)
Run Code Online (Sandbox Code Playgroud)
有什么建议?:)
我有一个计算速度慢的程序,我希望调试算法.现在总是重新运行所有内容非常繁琐,我宁愿从程序中间重新启动.你能想到一些聪明的方法来实现这个目标吗?
第一个模糊的想法是定义检查点(我在其中进行函数调用),其中我用pickle和/或sqlite保存本地和大数据(sqlite能够检查中间数据).后来我可以尝试调用程序告诉它在特定检查点重新启动.但是,为了这个目的,我不想在检查点之间拆分所有代码块.
有人聪明地知道如何解决这个调试问题?
我想用Python中的数据填充HTML模板.虽然我不知道任何HTML,但我的同事会准备HTML模板,而我提供数据.但是,他对Python知之甚少.
你能否建议一个非常基本的模板框架,它可以很好地处理HTML和Python的这种分离(即HTML中没有太多特殊的语法;在Python数据代码中我没有太多的HTML知道)?理想情况下,HTML模板应该非常接近纯HTML.
我也将表作为数据,所以如果我不必准备HTML表代码就好了,但他可以用一些最小的标记逻辑来做.理想情况下,即使我的同事应用CSS等更高级的概念,系统也应该有效.
我找到了广泛的清单,但很难判断哪个系统最接近我的要求,因为我不懂技术语言.
编辑:关键是我们是新手,我们只需要一个基本的解决方案:) - 但理想情况下我没有HTML,也没有超出纯HTML的范围.
我使用mysql.connector来做SQL操作.我有一个简短的脚本,它在光标上执行以下操作(字符串)cursor.execute(...):
"use {}".format(db)
"show tables"
command = """
ALTER TABLE Object DROP PRIMARY KEY;
ALTER TABLE Object ADD `id` bigint(20) NOT NULL PRIMARY KEY AUTO_INCREMENT FIRST;
ALTER TABLE Object ADD INDEX (`uid`);"""
Run Code Online (Sandbox Code Playgroud)
该脚本遍历多个数据库db.
问题是,在某些时候我收到"未读结果"错误.看来,当我运行脚本时,"使用mydb"会返回一个结果(cursor._have_result = True),当时我没想到.奇怪的是,如果我重新运行完整的脚本,它会运行一段时间,更多的数据库会在以后发出相同的错误.
你能建议一种解决或调查这个问题的方法吗?我能做些什么来防止"未读结果"?
PS:当我重新运行脚本时,ALTER命令对已经完成的数据库失败.不确定是否会导致问题.
我创建了一些数据帧数据样本df与
rdd = df.limit(10000).rdd
Run Code Online (Sandbox Code Playgroud)
这个操作需要相当长的时间(实际上为什么?在10000行之后它不能短路?),所以我假设我现在有了一个新的RDD.
但是,当我现在工作时rdd,每次访问它时都会有不同的行.好像它重新重新采样一样.缓存RDD有点帮助,但肯定不是保存?
它背后的原因是什么?
更新:这是Spark 1.5.2的再现
from operator import add
from pyspark.sql import Row
rdd=sc.parallelize([Row(i=i) for i in range(1000000)],100)
rdd1=rdd.toDF().limit(1000).rdd
for _ in range(3):
print(rdd1.map(lambda row:row.i).reduce(add))
Run Code Online (Sandbox Code Playgroud)
输出是
499500
19955500
49651500
Run Code Online (Sandbox Code Playgroud)
我很惊讶.rdd没有修复数据.
编辑:为了表明它比重新执行问题更棘手,这里是一个单一的操作,在Spark 2.0.0.2.5.0上产生不正确的结果
from pyspark.sql import Row
rdd=sc.parallelize([Row(i=i) for i in range(1000000)],200)
rdd1=rdd.toDF().limit(12345).rdd
rdd2=rdd1.map(lambda x:(x,x))
rdd2.join(rdd2).count()
# result is 10240 despite doing a self-join
Run Code Online (Sandbox Code Playgroud)
基本上,每当您使用limit结果时可能会出错.我并不是指"只是众多样本中的一个",而是非常不正确(因为在这种情况下结果应始终为12345).
我读到Kryo序列化程序在Apache Spark中使用时可以提供更快的序列化.但是,我通过Python使用Spark.
切换到Kryo序列化器后,我仍然可以获得显着的好处吗?