我目前正在使用SciPy.integrate.ode在Python中实现复杂的微生物食品网.我需要能够轻松地将物种和反应添加到系统中,所以我必须编写一些非常通用的代码.我的方案看起来像这样:
class Reaction(object):
def __init__(self):
#stuff common to all reactions
def __getReactionRate(self, **kwargs):
raise NotImplementedError
... Reaction subclasses that
... implement specific types of reactions
class Species(object):
def __init__(self, reactionsDict):
self.reactionsDict = reactionsDict
#reactionsDict looks like {'ReactionName':reactionObject, ...}
#stuff common to all species
def sumOverAllReactionsForThisSpecies(self, **kwargs):
#loop over all the reactions and return the
#cumulative change in the concentrations of all solutes
...Species subclasses where for each species
... are defined and passed to the superclass constructor
class …Run Code Online (Sandbox Code Playgroud) 我确信软件测试确实非常重要,特别是在科学方面.然而,在过去的6年中,我从来没有遇到任何经常进行测试的科学软件项目(其中大多数甚至不受版本控制).
现在我想知道你如何处理科学代码(数值计算)的软件测试.
从我的观点来看,标准单元测试经常忽略这一点,因为没有确切的结果,因此使用assert(a == b)可能会因"正常"数值误差而变得有点困难.
所以我很期待阅读你对此的想法.
是否有一个Python的标准函数,它根据从0到1的随机数的输入概率性地输出True或False?
我的意思是:
def decision(probability):
...code goes here...
return ...True or False...
Run Code Online (Sandbox Code Playgroud)
上面的例子,如果给出一个输入,比方说,0.7将以70%的概率返回True,而以30%的概率返回false
我有两个变量(x和y)彼此之间有一些S形关系,我需要找到某种预测方程,这将使我能够在给定任何x值的情况下预测y的值.我的预测方程需要显示两个变量之间的某种S形关系.因此,我不能满足于产生线的线性回归方程.我需要看到两个变量图的右侧和左侧出现的斜率的逐渐曲线变化.
我在googling曲线回归和python之后开始使用numpy.polyfit,但是如果你运行下面的代码,这给了我可怕的结果. 任何人都可以告诉我如何重新编写下面的代码,以获得我想要的S形回归方程式吗?
如果你运行下面的代码,你可以看到它给出了一个向下的抛物线,这不是我的变量之间的关系应该是什么样子.相反,我的两个变量之间应该存在更多的S形关系,但是与我在下面的代码中使用的数据紧密相符.下面代码中的数据来自大样本研究的手段,因此它们包含的统计功效比五个数据点所暗示的要多.我没有大样本研究的实际数据,但我确实有下面的方法和他们的标准偏差(我没有显示).我更愿意用下面列出的平均数据绘制一个简单的函数,但如果复杂性会带来实质性的改进,代码可能会变得更加复杂.
如何更改我的代码以显示最适合的sigmoidal函数,最好使用scipy,numpy和python? 这是我的代码的当前版本,需要修复:
import numpy as np
import matplotlib.pyplot as plt
# Create numpy data arrays
x = np.array([821,576,473,377,326])
y = np.array([255,235,208,166,157])
# Use polyfit and poly1d to create the regression equation
z = np.polyfit(x, y, 3)
p = np.poly1d(z)
xp = np.linspace(100, 1600, 1500)
pxp=p(xp)
# Plot the results
plt.plot(x, y, '.', xp, pxp, '-')
plt.ylim(140,310)
plt.xlabel('x')
plt.ylabel('y')
plt.grid(True)
plt.show()
Run Code Online (Sandbox Code Playgroud)
您的反应及其速度令人印象深刻.谢谢你,unutbu.但是,为了产生更有效的结果,我需要重新构建我的数据值.这意味着将x值重新转换为max x值的百分比,同时将y值重新转换为原始数据中x值的百分比.我尝试使用您的代码执行此操作,并提出以下内容:
import numpy as np
import matplotlib.pyplot as plt
import scipy.optimize
# Create numpy …Run Code Online (Sandbox Code Playgroud) 我想在业余时间从事编程项目,并想知道是否有一个项目可以帮助科学界以某种方式?
我认为Haskell是一种优美的语言,从基准测试来看,它的实现可以生成快速的代码.
但是,我想知道它是否适用于长期运行的应用程序,或者是否会追逐所有潜在的懒惰引发的泄漏,人们可能会在短期应用程序中忽略这些泄漏,这会让人感到沮丧吗?
这个Reddit评论回应了我的担忧:
只要有多个函数递归调用自身,堆配置文件就会停止为您提供任何帮助,以确定泄漏发生的位置.
(整个讨论似乎很有洞察力和坦率)
我个人对高性能计算感兴趣,但我想服务器和HPC有这个共同的要求.
如果Haskell适用于此类应用程序,是否有任何证明这一点的示例,即应用程序
如果Haskell不适合这样的应用程序,为什么呢?
更新:作为示例提出的Haskell的Yesod Web服务器框架可能存在内存问题.我想知道是否有人在连续几天提出请求后测试其内存使用情况.
performance haskell memory-leaks functional-programming scientific-computing
Matlab,R和Python功能强大,但对于我想做的一些数据挖掘工作来说,要么成本高,要么慢.我正在考虑将Javascript用于 速度,良好的可视化库,以及能够将浏览器用作接口.
我面临的第一个问题是科学编程的明显问题,如何对数据文件进行I/O操作?第二个是客户端还是服务器端?最后一个问题,我可以制作一些真正可移植的东西,即把它全部放在USB上并从中运行吗?
我花了几个星期寻找答案.Server2go似乎解决了客户端/服务器需求,我认为这意味着我可以从客户端的程序中获取数据.Server2go还允许从USB运行.我使用的数据文件通常是XML,似乎有几个javascript的javascript转换器.
然而,在看完之后,我不确定我的方法是否有意义.所以在我进一步提交之前,有关Javascript作为科学数据处理的便携式工具的任何建议/想法/指导吗?
python ×5
numpy ×3
scipy ×3
data-mining ×1
dictionary ×1
haskell ×1
javascript ×1
lua ×1
math ×1
matlab ×1
memory-leaks ×1
numerical ×1
open-source ×1
performance ×1
statistics ×1
testing ×1
torch ×1
unit-testing ×1