有人知道我为什么会得到错误的结果吗?我知道代码的最后一行有个错误,就是f=p0*pn*p
import numpy as np
def passage(n,i,j):
# this function calculate the first time passage distribution after n
#steps starting at i and end at j.
p=np.matrix([[0,1,0,0],[0.5,0,0.5,0],[0,.5,0,.5],[0,0,1,0]])
p0=p[:]
for k in range(len(p)): # let elements in column j be zeros
p0[k,j]=0
p1=p0[:]
for k in range(len(p)): #let element in column j and row j be zeros
p1[j,k]=0
pn=np.linalg.matrix_power(p1,n-2)
f=p0*pn*p # this line gives us wrong result. why
return f
一个潜在的问题来源:
产生一个
view
,而不是一个copy
。这意味着在这两个循环(可能不需要循环就可以写入)之后,p
、p0
和p1
具有相同的值。你知道吗你真的逐行测试了这个代码,确保每个步骤都是正确的吗?当我用Python编写函数时,尤其是
numpy
以交互方式测试所有步骤。你知道吗另一件事-除非你真的需要它,否则不要使用
np.matrix
。创建数组时,请坚持使用np.array
,即使是二维数组。如果需要矩阵乘法,可以使用np.dot
(或@
)。你知道吗快速重写函数:
解决方案是使用np.copy()复制
p
矩阵。你知道吗如果仍然没有得到预期的答案,那么您可能需要查看np.dot()和np.matmul()。你知道吗
还要注意PEP465引入了
@
作为矩阵乘法运算符。你知道吗相关问题 更多 >
编程相关推荐