[英]An array of floats giving a numpy.ndarray object
這是我幾分鍾前發表的問題的后續問題。 由於注釋中有user2357112,我將int與float相乘的問題已解決。 但是,它遇到了另一個障礙。
碼:
from __future__ import division
from fractions import Fraction
import numpy as np
from numpy import linalg as LA
def gcd(m,n):
if m < n:
return gcd(n,m)
return gcd(n,m%n)
def lcm(m,n):
return (m*n)/(gcd(m,n))
def answer(m):
tbd = []
l = len(m)
for i in range(l):
s = sum(m[i])
if s == 0:
tbd.append(i)
m[i][i] = 1
else:
for j in range(l):
m[i][j] /= s
tbd.sort(reverse=True)
a = np.array(m)
r = np.diag([1.0 for x in range(l)])
for i in range(100):
r *= a
initial = [0 for x in range(l)]
initial[0] = 1
final = initial * r
for i in tbd:
del final[i]
dens = []
for i in range(len(final)):
final[i] = final[i].limit_denominator()
dens.append(final[i].denominator)
lc = dens[0]
for j in range(1,len(dens)):
lc = lcm(lc,dens[j])
for i in range(len(final)):
final[i] = int(final[i] * lc)
final.append(lc)
return final
def main():
print answer([[1,2],[2,1]])
print answer([[0,1,0,0,0,1],[4,0,0,3,2,0],[0,0,0,0,0,0],[0,0,0,0,0,0],[0,0,0,0,0,0],[0,0,0,0,0,0]])
main()
ideone中的代碼: http ://ideone.com/DO1otS
錯誤:
Traceback (most recent call last):
File "prog.py", line 51, in <module>
File "prog.py", line 48, in main
File "prog.py", line 37, in answer
AttributeError: 'numpy.ndarray' object has no attribute 'limit_denominator'
我對final[i]
為什么被識別為numpy.ndarray
對象感到困惑。 我以為,由於final
是一維數組,因此final[i]
將因此在索引i
處返回該數組內的值( float
)。 我不確定為什么不是這樣。 先感謝您!
這是對您的問題“我為什么將final [i]識別為numpy.ndarray對象感到困惑”的答案。 在以下代碼片段中
r = np.diag([1.0 for x in range(l)])
initial = [0 for x in range(l)]
final = initial * r
我跳過了不必要的代碼。 上面的代碼顯示r
是numpy.ndarray
而initial
是一個列表。 然后final
是numpy.ndarray
和列表的numpy.ndarray
。 該產品的結果是numpy.ndarray
。
同樣重要的是r
是一個浮點數數組。 因此, final
也是一個浮點數數組,而不是分數對象。 因此,您不能在final
元素上調用limit_denominator()
。
另外,代碼如:
for i in tbd:
del final[i]
看起來很可疑。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.