Чтение строк как одномерного массива из текстового файла с использованием numpy - PullRequest
0 голосов
/ 07 декабря 2018

У меня есть текстовый файл, содержащий большое количество строк.Каждая строка имеет 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

1 Ответ

0 голосов
/ 07 декабря 2018

Я могу воспроизвести вашу ошибку с помощью:

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).Это помогает выявить несоответствия, подобные этой.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...