如何在python中最有效地读取以复数为特征的txt文件?

2024-09-30 22:20:00 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个存储在txt文件中的2k空间矩阵,它有许多列,这些列的复数格式为-0.0000009-0.0000011i。我想读取它,这样我就可以进行傅里叶变换和可视化。你知道吗

我已经尝试将这些数字存储为列表,但是,我不能再进行傅里叶变换了,因为要获得图像,傅里叶变换必须在水平方向和垂直方向上进行。我已经尝试过的

from scipy.fftpack import fft, ifft
import numpy as np
import csv


#opening and reading file
f = open("data.csv", 'r')
listttal = list(csv.reader(f, delimiter = ","))
listreal = []
listimag = []
#split imaginary and real part 
for i in range(1,len(listttal)):
    rel = listttal[i].split('+')
    listreal.append.parse(rel[1])
    img = rel.split('i')
    listimag.append.parse(img[1])



print(listttal)

#closing file 
f.close()

数据就是这样的。有许多列。你知道吗

-0.0000009-0.0000011i -0.000006-0.0000074i 0.000003-0.0000025i -0.0000059+0.000004i -0.0000151-0.0000055i 0.0000084-0.0000155i 0.000004-0.0000013i 0.0000089-0.0000143i 0.0000028-0.0000013i -0.0000011+0.0000029i -0.0000103+0.0000032i -0.0000103+0.0000032i -0.0000024+0.0000031i 0.0000045-0.0000058i -0.0000039+0.0000011i -0.0000021+0.0000104i -0.000001+0.000005i -0.0000006+0.0000057i -0.0000044+0.0000038i 0.0000048+0.0000013i 0.000009+0.000006i -0.0000042-0.0000069i -0.0000041+0.0000043i 0.0000066+0.0000029i 0.0000023-0.0000052i -0.0000074-0.0000037i 0.0000106+0.0000092i -0.0000041+0.0000075i 0.0000005-0.000001i -0.0000018+0.0000032i 0.0000042-0.0000039i -0.0000016-0.0000041i 0.0000017-0.0000068i 0.0000022+0.0000014i 0.0000066-0.0000001i 0.000002-0.0000086i -0.0000045-0.0000028i -0.0000043+0.0000021i 0.0000094+0.0000014i 0.0000022-0.0000046i -0.000004+0.0000071i 0.000003-0.0000037i -0.0000092+0.0000053i -0.0000014+0.000005i 0.0000043-0.0000073i -0.000006+0.0000065i 0.0000011+0.0000043i -0.000001+0.0000004i 0.0000068+0.0000068i -0.0000003+0.0000068i -0.0000012-0.0000075i -0.0000057-0.0000057i 0.0000025+0.0000014i 0.0000006-0.0000037i -0.0000026+0.0000002i -0.0000043+0.0000016i -0.0000016+0.0000052i -0.000001-0.0000012i 0.0000068-0.0000044i -0.0000001+0.0000004i 0.0000002+0.0000021i 0.0000032-0.000005i -0.0000028+0.0000101i 0.0000025+0.0000026i -0.0000045+0.0000079i -0.0000002-0.0000092i 0.0000066-0.0000014i 0.0000016+0.0000012i 0.0000023+0.0000068i 0.0000023+0.0000127i 0.0000077+0.0000022i 0.0000002+0.0000064i 0.0000067+0.0000044i 0.0000054+0.0000006i -0.0000033+0.0000006i 0.0000019+0.0000082i 0.0000108-0.0000035i 0.0000102-0.0000032i 0.0000048+0.0000023i 0.0000007i 0.0000026+0.0000042i 0.0000006-0.0000012i 0 -0.0000032+0.000005i -0.000001+0.0000092i -0.000003+0.0000042i 0.0000101-0.0000007i 0.0000072-0.000003i -0.0000021+0.0000033i -0.0000035-0.0000027i -0.0000044+0.0000035i

我想做傅里叶变换,把这些数字形象化。但是,由于我不知道如何阅读和存储它,请帮助。你知道吗


Tags: andcsvimporttxtimgparse数字方向
2条回答

您可以使用以下代码执行此操作

tmp = open('tmp', 'r').readlines()[1:-1]
tmp = [[complex(item.\
                rstrip().\
                lstrip().\
                replace('i', 'j'))
    for item in line.split('|')
    if len(item.rstrip()) > 0 and item != '\n'] for line in tmp]

假设文件名为tmp。你知道吗

结果tmp是一个复数列表。你知道吗

我不知道傅立叶变换,但是我可以提取每个复数的实部(但是可能有一些特殊情况,比如数据集中的数字0,就像那个字符一样)。这就是我所尝试的:

import csv
f = open("data.csv", 'r')
listttal = list(csv.reader(f, delimiter=" "))
listreal = []
listimag = []    
listttal = listttal[0]
for i in range(0,len(listttal)):
    realsign = ''
    tmp = listttal[i]
    if listttal[i][0] == '-':
        realsign = '-'
        tmp = listttal[i][1:]    
    argand = tmp.split('-')    
    if(len(argand)) != 2:
        argand = tmp.split('+')    
    realpart = realsign + argand[0]
    print(realpart)

或者,您可以先将数据保存在字符串中,然后提取每个复数的实部:

f = "-0.0000009-0.0000011i -0.000006-0.0000074i 0.000003-0.0000025i -0.0000059+0.000004i -0.0000151-0.0000055i 0.0000084-0.0000155i 0.000004-0.0000013i 0.0000089-0.0000143i 0.0000028-0.0000013i -0.0000011+0.0000029i -0.0000103+0.0000032i -0.0000103+0.0000032i -0.0000024+0.0000031i 0.0000045-0.0000058i -0.0000039+0.0000011i -0.0000021+0.0000104i -0.000001+0.000005i -0.0000006+0.0000057i -0.0000044+0.0000038i 0.0000048+0.0000013i 0.000009+0.000006i -0.0000042-0.0000069i -0.0000041+0.0000043i 0.0000066+0.0000029i 0.0000023-0.0000052i -0.0000074-0.0000037i 0.0000106+0.0000092i -0.0000041+0.0000075i 0.0000005-0.000001i -0.0000018+0.0000032i 0.0000042-0.0000039i -0.0000016-0.0000041i 0.0000017-0.0000068i 0.0000022+0.0000014i 0.0000066-0.0000001i 0.000002-0.0000086i -0.0000045-0.0000028i -0.0000043+0.0000021i 0.0000094+0.0000014i 0.0000022-0.0000046i -0.000004+0.0000071i 0.000003-0.0000037i -0.0000092+0.0000053i -0.0000014+0.000005i 0.0000043-0.0000073i -0.000006+0.0000065i 0.0000011+0.0000043i -0.000001+0.0000004i 0.0000068+0.0000068i -0.0000003+0.0000068i -0.0000012-0.0000075i -0.0000057-0.0000057i 0.0000025+0.0000014i 0.0000006-0.0000037i -0.0000026+0.0000002i -0.0000043+0.0000016i -0.0000016+0.0000052i -0.000001-0.0000012i 0.0000068-0.0000044i -0.0000001+0.0000004i 0.0000002+0.0000021i 0.0000032-0.000005i -0.0000028+0.0000101i 0.0000025+0.0000026i -0.0000045+0.0000079i -0.0000002-0.0000092i 0.0000066-0.0000014i 0.0000016+0.0000012i 0.0000023+0.0000068i 0.0000023+0.0000127i 0.0000077+0.0000022i 0.0000002+0.0000064i 0.0000067+0.0000044i 0.0000054+0.0000006i -0.0000033+0.0000006i 0.0000019+0.0000082i 0.0000108-0.0000035i 0.0000102-0.0000032i 0.0000048+0.0000023i 0.0000007i 0.0000026+0.0000042i 0.0000006-0.0000012i 0 -0.0000032+0.000005i -0.000001+0.0000092i -0.000003+0.0000042i 0.0000101-0.0000007i 0.0000072-0.000003i -0.0000021+0.0000033i -0.0000035-0.0000027i -0.0000044+0.0000035i"

listttal = list(f.split(' '))
listreal = []
listimag = []
for i in range(0,len(listttal)):
    realsign = ''
    tmp = listttal[i]
    if listttal[i][0] == '-':
        realsign = '-'
        tmp = listttal[i][1:]
    argand = tmp.split('-')
    if(len(argand)) != 2:
        argand = tmp.split('+')
    realpart = realsign + argand[0]
    print(realpart)

你可以在线试用这个链接https://repl.it/repls/MildProfuseComputation

相关问题 更多 >