绘制自相关函数图时gettingUFuncTypeError:无法将ufunc 'divide'输出从dtype('float64 ')转换为dtype('int32'),在注解# Plot the autocorrelation function for X and Y之后发生错误。我需要将跟踪x和y转换为浮点数吗?
import numpy as np
import matplotlib.pyplot as plt
# Define the probability matrix
p = np.array([[10/66, 15/66, 3/66], [20/66, 12/66, 0], [6/66, 0, 0]])
# Initialize starting values for X and Y
x = 0
y = 0
# Create arrays to store trace plots
trace_x = []
trace_y = []
# Run 12,000 iterations of Gibbs sampling (with 2,000 burn-in)
for i in range(12000):
# Sample a new value for X given the current value of Y
py = np.sum(p[y])
x = np.random.choice([0, 1, 2], p=p[y] / py)
# Sample a new value for Y given the current value of X
px = np.sum(p[:, x])
y = np.random.choice([0, 1, 2], p=p[:, x] / px)
# Append the new values to the trace plots after the burn-in period
if i >= 2000:
trace_x.append(x)
trace_y.append(y)
# Plot the autocorrelation function for X and Y
plt.acorr(trace_x, maxlags=50)
plt.title('Autocorrelation plot for X')
plt.xlabel('Lag')
plt.ylabel('Autocorrelation')
plt.show()
plt.acorr(trace_y, maxlags=50)
plt.title('Autocorrelation plot for Y')
plt.xlabel('Lag')
plt.ylabel('Autocorrelation')
plt.show()
1条答案
按热度按时间wljmcqd81#
对回溯的研究表明,错误是由行引起的
在
matplotlib
源代码中,位于https://github.com/matplotlib/matplotlib/blob/main/lib/matplotlib/axes/_axes.py。出现此错误是由于在使用就地操作时阻止
numpy
库中的自动向上转换。这在SO用户的回答中得到了很好的解释:pokehere。现在,为了回答OP的问题,我们需要避开就地操作。因此,对于OP的具体问题,有三种解决方案:
normed=False
作为参数传入plt.acorr
函数,如下所示:输出:
输出:
输出(与解决方案2相同):
我向matplotlib here提交了一个pull请求,并引用了OP的问题。如果我的pull请求被批准,我将更新答案。
**编辑:**拉取请求已审核通过。
acorr
函数可以按预期工作,即使在使用全整数的列表或numpy数组时也是如此。