python - 使用numpy从文本文件中读取行作为一维数组
问题描述
我有一个包含大量行的文本文件。每行有 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
解决方案
我可以通过以下方式重现您的错误:
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
)。它有助于捕捉这样的不一致。
推荐阅读
- react-native - React - 导航 headerRight 未显示
- sql-server - SSIS 没有使用正确的动态数据库
- c++ - 浮点数和字节数组问题的 C++ 联合
- php - 使用 PHP 将 CSV 输出到表会创建额外的头
- ruby-on-rails - Ruby on Rails - Form_for 中选择和禁用的第一个选项
- spring - 在 Apache Tomcat 中运行的 Spring Boot 外部 WAR 没有日志
- node.js - ERR_HTTP_HEADERS_SENT:发送到客户端后无法设置标头
- java - 为什么 EditText 调用 notifyDataSetChanged() 方法?
- elixir - 在 Elixir 中将过滤器重写为管道运算符
- php - 在 Woocommerce 中以编程方式添加带有评分的产品评论