以下代码的输出仅保存结果的最后一行,而不是将每一行值都放入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
答案 0 :(得分:0)
这不是你对python的理解。这是你的循环逻辑理解。
如果仔细观察循环,你(而不是Python)总是保留最后的元素。
在第一个和第二个循环中,每次您需要的变量都会覆盖,而不会保留每次迭代的整体信息。
在最后一个循环中,您在每次迭代中将row
变量声明为新列表。
此外,除了for循环中的索引变量之外,i
变量没有设置在任何地方!
答案 1 :(得分:0)
由于您只在循环结束后写出结果,因此您只看到最后的结果
此外,我预计该数据将得到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 ]]))