假设我有一个我要比较的数组/列表.在我更熟悉的语言中,我会做类似的事情
for (int i = 0, i < mylist.size(); i++)
for (int j = i + 1, j < mylist.size(); j++)
compare(mylist[i], mylist[j])
Run Code Online (Sandbox Code Playgroud)
这确保我们只比较每对一次.对于某些上下文,我正在对列表中包含的一堆对象进行冲突检测.对于检测到的每个碰撞,描述碰撞的小"碰撞"对象被附加到列表,然后另一个例程循环解决每个碰撞(取决于两个碰撞对象的性质).显然,我只想报告每次碰撞一次.
现在,这样做的pythonic方法是什么,因为Python倾向于使用迭代器而不是循环索引?
我有以下(错误)代码:
for this in mylist:
for that in mylist:
compare(this, that)
Run Code Online (Sandbox Code Playgroud)
但这显然会在每次碰撞中发生两次,这在尝试解决它们时会导致一些奇怪的行为.那么这里的pythonic解决方案是什么?
我在一家政府科学机构工作,通过我们的网站提供大量技术信息.Web开发并不是我们的强项,但我们顺便说一下.我们当前的许多内容都是通过Java applet提供的.最近我们得到了用户的反馈,他们无法访问网站的各个部分,因为他们的浏览器(主要是Safari和Firefox)由于安全问题而禁用了Java.当然,这可以通过升级和/或改变偏好来解决,但仍然会给非精明用户带来过高的障碍.
所以我的问题是Java applets的可能未来是什么?这种方法可能会变得不那么常见,并且不能/不会运行它们的浏览器配置比例会增加吗?正如我所提到的,我的组织(和我自己)不是网络开发专家,因此我们对趋势没有很好的认识.新内容是否应该用Java applet以外的东西编写(我们最近开发的内容使用JavaScript代替).我们是否应该计划将applet转换为响应不断减少的支持?
Python允许您将预定义函数作为属性分配给类,例如
def fish_slap(fish):
# do something
class dance(object):
dance_move=fish_slap
Run Code Online (Sandbox Code Playgroud)
但是,如果我们试着说
d=dance()
d.dance_move("Halibut")
Run Code Online (Sandbox Code Playgroud)
我们得到以下错误
TypeError: fish_slap() takes exactly 1 arguement (2 given)
Run Code Online (Sandbox Code Playgroud)
Python似乎将此视为对象方法并提供隐含的"自我"参数.很公平,似乎我刚刚学会了以这种方式将函数作为属性赋值等同于直接在类中定义函数.我可以看到这是一个有用的功能.
但是,在这种情况下,这不是我想要的.在我的应用程序中,我将统计模型编码为不同的类,它们也有自己的"训练"方法,用于根据提供的数据训练模型参数.为此,您希望最小化(或最大化)需要提供的值的目标函数.一个简单的目标函数就是一个例子
def RMSE(predicted,observed):
"Root mean squared error"
return sp.sqrt(sp.mean((predicted-observed)**2))
Run Code Online (Sandbox Code Playgroud)
SciPy作为sp导入的位置.这些目标函数在单个.py文件中定义并在我的代码中使用,并且自然地作为独立函数存在,而不是作为具有隐含的"self"参数的类方法.
我希望能够将所需的目标函数设置为属性,以便模型对象的任何后续工作都可以使用该函数
some_model=SomeModel(initial_parameter_values_guess)
some_model.objective_function = RMSE
some_model.train(training_data)
predictions_RMSE = some_model.predict()
some_mode.objective_function = MAE
predictions_MAE = some_model.predict()
Run Code Online (Sandbox Code Playgroud)
在这个例子中似乎我可以将目标函数作为参数传递给训练,但是在我的应用程序中有更多人想要做的事情,似乎更有意义的是能够设置/获得目标函数而不是而不是反复提供它作为一个论点.
有许多解决方法可以实现这种基本行为,但最流行的方法是什么?
请注意,我当前的代码是python2和python3兼容.如果有特定版本的解决方案,请指出.我正在运行python2以便能够使用matplotlib但是我试图确保代码是python3兼容的那个模块.
说我刚刚实施了一些Python类,并想重载说" - "操作,但不记得,如果我需要使用__subtract__
,__minus__
或事实上正确的答案__sub__
.有没有通过翻译快速找到这个的方法?我尝试过简单的事情,help(-)
但没有成功.
有大量的在线资源可以提供可用运营商的最终列表,但我正在寻找一种快速离线方法.
对于普通操作员,可以快速记住它们,但是一些较少使用的操作员通常需要查找.
我有一个gappy时间序列存储在带有datetimeindex的pandas数据帧中.我现在想要识别时间序列中的间隙,以便识别连续的段以便单独处理它们(并且在某些情况下,将它们之间的间隙足够短的段粘合在一起).
我可以通过两种主要方式来做到这一点.第一种是使用各种方法重新索引以获得常规时间序列并观察间隙区域中的填充NA值.在我的情况下,导致许多额外的行(即一些冗长的间隙).然后,您仍需要执行额外步骤以识别连续段.
另一种方法,以及我目前正在使用的方法是使用np.diff来区分索引并使用np.where找到间隙.但是,有更多的本地熊猫方法吗?这似乎是一项相当普遍的任务.我注意到np.diff和pandas存在一些问题,包括numpy和pandas版本的一些组合,因此仅使用pandas解决方案是更可取的.
什么是完美的将是类似的
for segment in data.continuous_segments():
# Process each segment
Run Code Online (Sandbox Code Playgroud)
对于数据帧数据.