我仍然对python感到满意,并努力解决此问题:
我正在使用名为Fatiando a Terra的工具包在python中运行脚本;我定义了一个物体的参数,然后用重力/梯度法对其进行建模,如下所示:
import numpy as np
from fatiando.vis import mpl
from fatiando.mesher import Prism
from fatiando.gravmag import prism
from fatiando.constants import G
from fatiando import utils
import fatiando
import matplotlib.pyplot as plt
model = Prism(-1000, 1000, -1000, 1000, 1000, 1100, {'density': 300})
n = 500
x = np.zeros(n)
y = np.zeros(n)
z = np.linspace(0, 2000, n)
data = np.array([prism.gx(x, y, z, [model]),
prism.gy(x, y, z, [model]),
prism.gz(x, y, z, [model]),
prism.gxx(x, y, z, [model]),
prism.gxy(x, y, z, [model]),
prism.gxz(x, y, z, [model]),
prism.gyy(x, y, z, [model]),
prism.gyz(x, y, z, [model]),
prism.gzz(x, y, z, [model])])
在此之后,我正在使用python对其进行绘制,但是此代码无关。
我使用以下命令手动执行了一个微小的高斯数组:
from numpy.random import multivariate_normal
multivariate_normal([300]. [[300]], 10)
它提供给我的10个值是我手动输入到脚本中并生成输出的。
我想做的是对300的密度值执行高斯分布+ -100。我想生成1000个值,并将它们循环回到脚本中,对每个密度变量运行该程序1000次。
对于输出,我当前正在使用:
titles = ['gx', 'gy', 'gz', 'gxx', 'gxy', 'gxz', 'gyy', 'gyz', 'gzz']
np.savetxt(title, np.vstack((z.ravel(), d.ravel())).T)
理想情况下,对于高斯数组,我希望以相同的方式输出文本,但要使用1000个样本的平均值而不是任何单个值。同样,标准偏差也会很大。
抱歉,如果我要求太多,非常感谢您提供的任何帮助。干杯!
尽管它也可以用作答案,但它更像是一个扩展的评论,而不是一个答案。
将代码包装在一个函数中,然后在循环中调用该函数,并在最后平均结果,可能看起来像这样(部分是象征性的):
##import statements
NDENSITIES = 1000
def dowork(density):
model = Prism(-1000, 1000, -1000, 1000, 1000, 1100, {'density': 300})
##other code
return data ## or whatever is important
densities = multivariate_normal([300], [[300]], NDENSITIES)
results = []
for density in range(densities):
results.append(dowork(density))
results = np.vstack(results) ## or hstack or dstack, depending on the dimensions of `data`
mean = results.mean() # possibly: results.mean(axis=0) or with axis=1 etc. Again dependent on the dimensions
std = results.std()
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句