【问题标题】:Python: error in returning loop resultsPython:返回循环结果时出错
【发布时间】:2016-02-24 07:28:51
【问题描述】:

以下代码的输出仅保存最后一行结果,而不是将每一行值放入 csv 文件。我对python的了解有限。我认为我的循环部分不正确。谁能帮帮我?

代码

import numpy as np
from numpy import genfromtxt

with open('binary.csv') as actg:
    actg=actg.readlines()
    with open('single.csv') as single:
        single=single.readlines()
        with open('division.csv') as division:
            division=division.readlines()

            for line in actg:
                for line2 in single:
                    for line1 in division:

                        myarray = np.fromstring(line, dtype=float, sep=',')
                        myarray = myarray.reshape((-1, 3, 4))
                        a=np.asmatrix(myarray)
                        a=np.array(a)

                        single1 = np.fromstring(line2, dtype=float, sep=',')
                        single1 = single1.reshape((-1, 4))
                        s=np.asmatrix(single1)
                        s=np.array(s)

                        division1 = np.fromstring(line1, dtype=float, sep=',')
                        m=np.asmatrix(division1)
                        m=np.array(m)
                        res2 = (s[np.newaxis,:,:] / m[:,np.newaxis,:] * a).sum(axis=-1)

np.savetxt("output.csv", res2, delimiter=",")

binary.csv

0,1,0,0,1,0,0,0,0,0,0,1
0,0,1,0,1,0,0,0,1,0,0,0

single.csv:

0.28,0.22,0.23,0.27,0.12,0.29,0.34,0.21,0.44,0.56,0.51,0.65

division.csv

0.4,0.5,0.7,0.1
0.2,0.8,0.9,0.3

预期输出

 0.44,0.3,6.5
 0.26,0.6,2.2

实际输出

0.26,0.6,2.2

【问题讨论】:

    标签: python loops for-loop file-io


    【解决方案1】:

    这不是你对python的理解。这是您对循环逻辑的理解。

    如果你仔细观察你的循环,(而不是 Python)总是保留最后的元素。

    在第一个和第二个循环中,您每次都覆盖您需要的变量,并且您不会保留每次迭代的整体信息。

    在最后一个循环中,您将row 变量声明为每次迭代中的新列表。

    另外,i 变量除了作为 for 循环中的索引变量外,没有在任何地方设置!

    【讨论】:

    • 您好,我刚刚编辑了我的帖子。输出仍然不正确:(
    • 嘿。当然是不正确的,因为你仍然犯同样的错误。我怀疑这段代码是为了某种练习而你发现它已经准备好了。其中的错误是微不足道的,为您提供解决方案对您不利。您应该阅读有关编程中的循环的信息。干杯!
    • 我使用 csv writerow 作为解决上述问题的技巧,即使它并不完全适合我的情况。谢谢:)
    【解决方案2】:

    因为您只在循环完成后才写出结果,所以您只能看到最后一个结果。
    另外,我希望该数据有 4 个结果,而不是 2 个。
    您需要在每次迭代时写入输出或存储每次迭代,然后写出存储的值。
    每次计算时尝试打印res2,您会看到如下内容:

    ('Final Results', array([[ 0.44,  0.3 ,  6.5 ]]))
    ('Final Results', array([[ 0.275     ,  0.6       ,  2.16666667]]))
    ('Final Results', array([[ 0.32857143,  0.3       ,  1.1       ]]))
    ('Final Results', array([[ 0.25555556,  0.6       ,  2.2       ]]))
    

    【讨论】:

    • 除法部分应该使用元素明智的运算符并且只返回两行答案而不是四行。我还没有弄清楚如何做那部分:(
    猜你喜欢
    • 2017-09-30
    • 2011-08-18
    • 2017-03-10
    • 1970-01-01
    • 1970-01-01
    • 2013-12-18
    • 1970-01-01
    • 2014-04-05
    • 1970-01-01
    相关资源
    最近更新 更多