【问题标题】:Print summed arrays when importing files from numpy.genfromtxt从 numpy.genfromtxt 导入文件时打印求和数组
【发布时间】:2020-03-08 03:52:13
【问题描述】:

我有几个文件,其中第一列为文本,其余为数字

first.txt

A 1 3 5 7 B 9 11 13 15

second.txt

A 0 4 6 8
乙 10 12 14 16

我喜欢导入的

a=[] 
b=[]
descr=[]

descr.append( np.genfromtxt('first_file.txt', dtype=None,usecols=(0)))
for counter in range(1,5) :
    a.append( np.genfromtxt('first_file.txt', dtype=None,usecols=(counter+1)))
    b.append( np.genfromtxt('second_file.txt', dtype=None,usecols(counter+1)))

现在基本上,descr[] 保存第一列的字符串,而 a 和 b 是我现在需要对每列求和并打印类似的数组

求和结果

1 7 11 15

乙 19 23 27 31

我试过了

total = a+b

lines = ['  \t'.join([str(x[i]) if len(x) > i else ' ' for x in total]) for i in range(len(max(total)))]
for i in range(len(descr)):
    if descr[i] != '' :
        print '{}  {}'.format(descr[i], lines[i])

但我明白了

lines = [' \t'.join([str(x[i]) if len(x) > i else ' ' for x in tot]) for i in range(len(max(tot)))] ValueError: 数组的真值 具有多个元素是模棱两可的。使用 a.any() 或 a.all()

【问题讨论】:

  • 在加载后打印abdescr 的值。你如何加载这些数组并不重要:这不是发生最终错误的地方。
  • 打印没有显示任何错误...我可以看到数组填充正常
  • 你能打印(并在此处添加)total 的前 5 或 10 行吗?
  • @Mstaino 原则上文件并不像我给出的示例那样小 - 它们看起来更像[array([8.7213804e+05, 8.1190010e+04, 2.1497340e+04, 2.1497340e+04, 1.9885670e+04, 1.3772000e+02, 1.3772000e+02]), array([8.7213804e+05, 8.1190010e+04, 2.1497340e+04, 2.1497340e+04, 1.9885670e+04, 5.4840000e+01, 5.4840000e+01])...]
  • 我认为你没有抓住重点。我希望你的负载完全没问题。这与您的问题完全无关。您应该编辑您的问题以获得最小的可重复示例。我们不需要查看您的填充数组或文本文件,只需查看一个小样本数组和失败的操作

标签: python numpy genfromtxt


【解决方案1】:

我无法完全理解你的问题,你的评论与total也没有帮助我。考虑到您的全部问题,您可以简单地做:

import numpy as np 
a = []
b = []

descr = np.genfromtxt('first.txt', dtype=None, usecols=(0))

for counter in range(1,5):
    temp = np.genfromtxt('first.txt', dtype=None,usecols=(counter))
    a.append(temp)
    temp = np.genfromtxt('second.txt', dtype=None,usecols=(counter))
    b.append(temp)

total = []
seq = []
seq.append(a)
seq.append(b)
total.append(np.sum(seq,axis=0))
print("Total: ")
print(total)

print("\nResult: ")
for i in range(len(descr)):
    if descr[i] != '' :
        print (descr[i], total[0][:,i])

它会给你以下结果:

Total: 
[array([[ 1, 19],
       [ 7, 23],
       [11, 27],
       [15, 31]])]

Result: 
b'A' [ 1  7 11 15]
b'B' [19 23 27 31]

【讨论】:

    【解决方案2】:

    您的错误之一是在表达式max(total) 中,假设您想要使用数组的最大长度:

    l = max(map(len, total))
    

    然后,按照你的语法:

    lines = ['  \t'.join([str(x[i]) if len(x) > i else ' ' for x in total]) for i in range(l)]
    

    如果这没有给出预期的结果,请添加一个预期输出的样本

    【讨论】:

      猜你喜欢
      • 2014-07-29
      • 2021-09-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多