繁体   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