这里scipy.integrate.odeint用六个不同的标准颂歌问题来调用rtol= atolfrom 1E-06to 1E-13。我查看了所有较大公差的结果之间的最大差异减去最小公差的结果,以获得某种“错误”的表示。我很好奇为什么对于给定的容差,一个问题 (D5) 给出的错误比另一个问题 (C1) 严重一百万倍,即使步数范围相当窄(在 10 倍之内)。
脚本中给出了颂歌问题的引用。所有问题都相当正常化,所以我正在进行rtol类似的治疗atol。
重申一下 - 我的问题是,为什么不同问题之间的误差几乎相差一个因子1E+06,尽管误差随容差而变化。当然,C1 是“最柔和的”,D5 在“近日点”处具有戏剧性的峰值,但我认为例程会在内部调整步长,以便误差相似。
编辑:我添加了“错误”的时间演变,这可能会带来一些启发。
# FROM: "Comparing Numerical Methods for Ordinary Differential Equations"
# T.E. Hull, W.H. Enright, B.M. Fellen and A.E. Sedgwidh
# SIAM J. Numer. Anal. vol 9, no 4, December 1972, pp: 603-637
def deriv_B1(y, x):
return [2.*(y[0]-y[0]*y[1]), -(y[1]-y[0]*y[1])] # "growth of two conflicting populations"
def deriv_B4(y, x):
A = …Run Code Online (Sandbox Code Playgroud) 更新: Skyfield 刚刚进行了重大修订,包括扩展文档和角度分离方法 - 请参阅已接受的答案。
我正在使用Skyfield计算两个物体之间的表观角距。我没有在包中找到方法,所以我“发明”了一种通过计算两个视位置向量之间的点积的方法。
这是目前最好的方法吗?在Skyfield的范围内,它本质上是正确的吗?
def separation(seconds, lat, lon):
lat, lon, seconds = float(lat), float(lon), float(seconds) # necessary it seems
place = earth.topos(lat, lon)
jd = JulianDate(utc=(2016, 3, 9, 0, 0, seconds))
mpos = place.at(jd).observe(moon).apparent().position.km
spos = place.at(jd).observe(sun).apparent().position.km
mlen = np.sqrt((mpos**2).sum())
slen = np.sqrt((spos**2).sum())
sepa = ((3600.*180./np.pi) *
np.arccos(np.dot(mpos, spos)/(mlen*slen)))
return sepa
from skyfield.api import load, now, JulianDate
import numpy as np
from scipy.optimize import minimize
data = load('de421.bsp')
sun = data['sun']
earth = data['earth']
moon = …Run Code Online (Sandbox Code Playgroud) 下面的脚本是抽象的。我的问题是关于使用threading.Lock()
锁定限制了对“共享资源”的访问,但我对这能走多远感到紧张。我有对象属性,它们是在这个例子中具有数组属性的对象列表。在某些情况下,依赖会走得更远。
是否Lock()“知道”需要锁定的所有内容?
还显示了下面脚本的输出。脚本的目的主要是为了讨论 - 它不会失败,但我不相信它会锁定它需要的一切。
start: [array([0, 1]), array([0, 1, 2]), array([0, 1, 2, 3])]
append an object
done!
finish: [array([505, 605]), array([10, 11, 12]), array([10, 11, 12, 13]), array([5])]
import time
from threading import Thread, Lock
import numpy as np
class Bucket(object):
def __init__(self, objects):
self.objects = objects
class Object(object):
def __init__(self, array):
self.array = array
class A(Thread):
def __init__(self, bucket):
Thread.__init__(self)
self.bucket = bucket
def run(self):
nloop = 0
locker …Run Code Online (Sandbox Code Playgroud) 我确定我遗漏了一些明显的东西。我通过内容文件夹内的文件夹名称定义类别。如果我content在查看页面时单击,我会看到文件夹名称(例如,categ1、categ2)加上“misc”,这很好。当我单击 categ1 时,我会看到一篇完整的文章,但图像链接现在都已损坏。
localhost:8000/category/categ1.html
Run Code Online (Sandbox Code Playgroud)
我希望看到的只是该类别中可点击的文章列表。或者至少,没有断开的链接。
(如果我尝试使用标签,我有类似的行为,但一次只做一件事......)
.rst文件中没有类别行。
除了名称、时区等。我在我的配置中使用这些。
更新:图像位于内容的图像文件夹中。我还在categ1 中放了一个Images 文件夹的副本,但没有帮助。
THEME = 'nmnlist'
PATH = 'content'
# ARTICLE_PATHS = ['articles'] # have tried this also
STATIC_PATHS = ['images', 'pdfs']
RELATIVE_URLS = True # have tried False also
PLUGINS = ["render_math"]
Run Code Online (Sandbox Code Playgroud) scipy.optimize.minimize使用默认方法将返回初始值作为结果,而不会出现任何错误或警告消息。在使用此答案建议的Nelder-Mead方法解决问题时,我想了解:
为什么默认方法会在不警告起点的情况下返回错误答案作为答案-并且 在这种情况下,有什么方法可以防止“没有警告就错误回答”避免这种情况?
请注意,该函数separation使用python软件包Skyfield生成无法保证平滑的最小化值,这可能就是为什么Simplex在此处更好的原因。
结果:
测试结果:[ 2.14159739 ]'正确': 2.14159265359初始值:0.0
默认结果:[ 10000。 ]“正确”:13054初始值: 10000
Nelder-Mead结果:[ 13053.81011963 ]'正确': 13054初始值:10000
FULL OUTPUT using DEFAULT METHOD:
status: 0
success: True
njev: 1
nfev: 3
hess_inv: array([[1]])
fun: 1694.98753895812
x: array([ 10000.])
message: 'Optimization terminated successfully.'
jac: array([ 0.])
nit: 0
FULL OUTPUT using Nelder-Mead METHOD:
status: 0
nfev: 63
success: True
fun: 3.2179306044608054
x: array([ 13053.81011963])
message: 'Optimization terminated …Run Code Online (Sandbox Code Playgroud) 使用 numpy\'s Zeros_like和相关函数,有一个选项
\n\n\nsubok:布尔值,可选。
\n\n
numpy.zeros_like(a, dtype=None, order=\'K\', subok=True)如果为True,则新创建的数组将使用\xe2\x80\x98a\xe2\x80\x99的子类类型,否则为基类数组。默认为 True。
\n
我假设所有 numpy 数组都是类ndarray,并且我从来不需要详细查看数组的子类。在什么情况下我可能想选择不使用相同的子类,而指定使用基类?
使用 PIL 读取图像后,我通常使用 scipy.ndimage 执行高斯滤波器,如下所示
import PIL
from scipy import ndimage
PIL_image = PIL.Image.open(filename)
data = PIL_image.getdata()
array = np.array(list(data)).reshape(data.size[::-1]+(-1,))
img = array.astype(float)
fimg = ndimage.gaussian_filter(img, sigma=sigma, mode='mirror', order=0)
Run Code Online (Sandbox Code Playgroud)
PIL 中有如下高斯模糊函数(来自这个答案),但我不知道它究竟是如何工作的,也不知道它使用的是什么内核:
from PIL import ImageFilter
fimgPIL = PIL_image.filter(ImageFilter.GaussianBlur(radius=r)
Run Code Online (Sandbox Code Playgroud)
关于的问题PIL.ImageFilter.GaussianBlur:
对Gaussian Blur - 标准偏差、半径和内核大小的回答的评论如下,但我还没有找到 PIL 的信息。
OpenCV使用内核半径,
(sigma * 3)而scipy.ndimage.gaussian_filter使用内核半径 int(4 * sigma + 0.5)
在太空SE中,有人建议我使用PyEphem来计算两线元素的轨道.现在我很好奇它如何计算"内置"太阳系对象,如行星及其卫星.它是否使用标准JPL星历表(也在这里)或其他东西?
例如,通过在有限的时间段内对轨道进行积分来生成(松散地说)JPL星历表,同时与大量的观测数据进行比较以得到一组轨道参数.然后将它整合到未来和过去,结果按固定时间制表.这个位置表(和其他东西)可以称为星历表.
然后通过在时间段之间插值来使用星历表 - 在这种情况下使用表中给出的切比雪夫多项式的系数.
例如,可以使用python模块de405读取JPL DE405星历
@Mattexx在下面指出XEphem正在使用一个被调用的例程libastro,并且PyEphem可能也在做同样的事情.所以我想知道它用于计算位置 - 算法和观察数据集.
我想获得各种XYZ坐标中的物体坐标,而不是它们出现在天空中的位置.我对......感兴趣:
欧洲经委会:" 以地球为中心的惯性 "(不与地球一起旋转)
ECEF:" 以地球为中心的地球固定 "(非惯性,也称为"以地球为中心的旋转")
和某种太阳系或黄道坐标(以太阳或重心为中心).
我已经安装了PyEphem,跑了几个例子,并已开始了解什么是引擎盖下,但到目前为止,我已经找到了例子似乎专注于事情是如何出现在天空.
指向有用的"如何"或简单示例的链接会有所帮助.现在我看不出去哪里有标准选项:
In [55]: mars.
mars.a_dec mars.g_dec mars.radius
mars.a_epoch mars.g_ra mars.rise_az
mars.a_ra mars.hlat mars.rise_time
mars.alt mars.hlon mars.set_az
mars.az mars.hlong mars.set_time
mars.circumpolar mars.mag mars.size
mars.compute mars.name mars.sun_distance
mars.copy mars.neverup mars.transit_alt
mars.dec mars.parallactic_angle mars.transit_time
mars.earth_distance mars.phase mars.writedb
mars.elong mars.ra
In [55]: mars.
Run Code Online (Sandbox Code Playgroud) 我从这个不错的答案中的脚本开始。它适用于“RGB”,但 8 位灰度“L”和 1 位黑/白“1”PIL 图像模式只是显示为黑色。我究竟做错了什么?
from PIL import Image, ImageDraw, ImageFont
import numpy as np
w_disp = 128
h_disp = 64
fontsize = 32
text = u"??!"
for imtype in "1", "L", "RGB":
image = Image.new(imtype, (w_disp, h_disp))
draw = ImageDraw.Draw(image)
font = ImageFont.truetype("/Library/Fonts/Arial Unicode.ttf", fontsize)
w, h = draw.textsize(text, font=font)
draw.text(((w_disp - w)/2, (h_disp - h)/2), text, font=font)
image.save("NiHao! 2 " + imtype + ".bmp")
data = np.array(list(image.getdata()))
print data.shape, data.dtype, "min=", data.min(), "max=", data.max()
Run Code Online (Sandbox Code Playgroud)
输出: …