如何解决为什么我会收到这个错误:ValueError: setting an array element with a sequence?
我目前正在开展一个项目,研究恒星形成区域如何被银河中心的尘埃遮挡,需要模拟恒星形成区域以进行进一步测试。我使用多元高斯概率函数制作了我的恒星形成区域,这需要三个输入,即“x”、“mu”和“cov”。基本上,我想生成多个恒星形成区域并将它们加在一起,每个恒星形成区域都有自己的“x”、“mu”和“cov”。在我的例子中,'x' 和 'mu' 需要是一个列向量,'cov' 需要是一个 3x3 矩阵。目前,我的代码在这一行给了我一个错误:grid[i,j,k] += pdf_multivariate_gauss(vect,mu_in,cov_in)
,我不知道如何解决它。任何帮助将不胜感激。
完整代码:
import numpy as np
import matplotlib.pyplot as plt
from scipy.stats import multivariate_normal
from scipy import linalg
def pdf_multivariate_gauss(x,mu,cov):
'''
Calculate the multivariate normal density (pdf)
Keyword arguments:
x = numpy array of a "d x 1" sample vector
mu = numpy array of a "d x 1" mean vector
cov = "numpy array of a d x d" covariance matrix
'''
'mu must be a column vector'
'x must be a column vector'
'covariance matrix must be square'
'cov_mat and mu_vec must have the same dimensions'
'mu and x must have the same dimensions'
part1 = 1 / ((2*np.pi)**(len(mu)/2))*(linalg.det(cov)) # Defining the two halves of the equation separately
part2 = -0.5*((x-mu).T).dot(linalg.inv(cov)).dot(x-mu) # .linalg is the package with matrix operations in
return np.sqrt(part1) * np.exp(part2) # Multiplying the two halves together
n = 100 # Defines the for loop boundaries,will have to be much bigger for real thing
n_core = 5
vect = np.zeros(3) # A dx1 array of vector values,each run of loop will produce 1 vector
grid = np.zeros([100,100,100]) # Defining space to plot the Gaussian inside
c_dens = np.zeros([100,100]) # Defining a space to plot column density
for i in range(n):
x = 0 + i*0.1 + 0.5*0.1 # Will have to code values for dx,dy and dz rather than hard coding them
for j in range(n): # Can reduce size of grid to make it run faster
y = 0 + j*0.1 + 0.5*0.1 # To generalise into 3D just add another vect[2] = z,have to make grid() 3D too
for k in range(n):
z = 0 + k*0.1 + 0.5*0.1
vect[0] = x
vect[1] = y
vect[2] = z
for l in range(n_core):
mu = np.random.uniform(0,10,(n_core,3,1)) # Controls the 'position' of the gaussian core
cov = np.random.uniform(0,3)) # Contols the shape of the gaussian core,off axis elements to zero for circle
mu_in = mu[l,:,:]
cov_in = cov[l,:]
grid[i,cov_in)
c_dens[i,j] = np.sum(grid[i,:])*0.1 # Column density map is summation of i and j components of grid multiplied by dz
print("grid",grid)
plt.clf()
im = plt.imshow(image,aspect='auto',cmap='magma',origin='upper')
plt.colorbar()
plt.show()
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。