簡體   English   中英

給定numpy.ndarray對象的浮點數組

[英]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

我跳過了不必要的代碼。 上面的代碼顯示rnumpy.ndarrayinitial是一個列表。 然后finalnumpy.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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM