【问题标题】:Reading rows as one-dimensional array from textfile using numpy使用 numpy 从文本文件中读取行作为一维数组
【发布时间】:2019-05-09 11:19:38
【问题描述】:

我有一个包含大量行的文本文件。每行有 4096 个整数值。

500 501 300 400 ------------------------------------------------------------
300 400 600 700 -----
501 407 603 771 ------------------------------------------------------------
382 659 889 700 -----
so on

我想要做的是使用 numpy 将此文件作为一维数组读取。我无法使用简单的 loadtxt 来做到这一点,因为它需要相同数量的列。 关于我该怎么做的任何建议?我的最终目标是操纵这个数组来插入某些值。

您可以在此处从我的代码中获取更多详细信息,

from sys import argv
import numpy as np 
script, PhilFile = argv
intxt = open(PhilFile)
invalues = intxt.read()

invalues = invalues.replace(' ', '\n')

adc = np.asarray(invalues)
print adc

N_CHANS = 5

N_SAMPS = 256

H = len(adc)/N_SAMPS

N = 0

header = np.array([666,777,888,999])

for l in range(0,H) :
   adc = np.insert(adc, [N]*header.size, header)

   N += 258

print adc

np.savetxt("test1.txt", adc)

我提供文本文件作为参数,目前,我收到一个错误,

 H = len(adc)/N_SAMPS 
 TypeError: len() of unsized object

【问题讨论】:

  • 我不明白。你说每一行都有4096 integer values,但不能使用loadtxt,因为列数不同。这些是相互矛盾的陈述。好的,所以你读取文件并替换 nl。但是,您在哪里将行拆分为代表这些整数的字符串?

标签: python arrays python-2.7 numpy


【解决方案1】:

我可以通过以下方式重现您的错误:

In [596]: np.array('1 2 3 4 5')
Out[596]: array('1 2 3 4 5', dtype='<U9')
In [597]: len(_)
---------------------------------------------------------------------------
TypeError                                 Traceback (most recent call last)
<ipython-input-597-556fcc1c5d2a> in <module>()
----> 1 len(_)

TypeError: len() of unsized object

从单个字符串构造一个数组会生成一个 0d 单元素数组。

你必须先拆分字符串:

In [598]: np.array('1 2 3 4 5'.split())
Out[598]: array(['1', '2', '3', '4', '5'], dtype='<U1')
In [599]: np.array('1 2 3 4 5'.split(),int)
Out[599]: array([1, 2, 3, 4, 5])

您打印了adc。你没注意到它不是一个数字数组吗?我强烈建议在交互式会话中逐步开发这样的代码(我使用ipython)。它有助于发现这样的不一致。

【讨论】:

  • 谢谢!我现在可以看到问题了,我采用了您的方法,代码现在可以正常工作了。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2016-01-07
  • 2022-11-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-09-04
相关资源
最近更新 更多