从带列的文本文件创建二维数组(Python)
我刚开始学Python,正在写一个脚本,目的是从一个文本文件中创建一个二维数组。这个文件有4列,格式如下:
P F T S
0 0 0 0.227321
0 0 1 0.0380602
0 0 2 -0.804958
0 0 3 0.271401
其中P、F、T和S分别代表极化状态、频率、时间和信号强度。我想创建一个二维矩阵,里面存放信号强度S,并且这个矩阵的x和y坐标对应于时间T和频率F的值(忽略P)。我知道怎么从文本中创建一个矩阵,但那样生成的只是一个4行n列的矩阵,和文本文件的格式一模一样。我该怎么生成我需要的二维矩阵呢?
补充:我说的是忽略P,而不是S。
3 个回答
0
- 先把文件里的内容读进来,然后把所有的数据存成一个4行n列的矩阵,就像你说的那样。
- 接着,逐行遍历这个矩阵,把合适的S或者P值保存到数组中,格式是array[F][T]=S。
1
这个例子怎么样:
with open("matrix.txt", "r") as df:
txt = df.read()
items = txt.split()
items = [float(n) for n in items]
data = zip([i for i in items[1::4]], [i for i in items[2::4]], [i for i in items[3::4]])
print(data)
print(data[1][2])
输出结果:
[(0.0, 0.0), (0.0, 1.0), (0.0, 2.0), (0.0, 3.0)]
1.0
现在“data”里包含了X和Y坐标,还有一个数值。你应该有你需要的所有信息了。
3
假设你的文本文件叫做 data.txt
import numpy as np
dat = np.loadtxt( 'data.txt' )
现在 dat[0,:]
代表的是第一行,而 dat[:,2]
代表的是第三列,依此类推。需要注意的是,你要在文件的第一行加上一个注释符号 #
,这样 loadtxt
就不会读取这一行了。
ii = dat[:,1].astype( np.int ) # this is the F column as ints
jj = dat[:,2].astype( np.int ) # this is the T column as ints
nx = max(ii) + 1
ny = max(jj) + 1
d = np.zeros( (nx,ny) )
n = 0
for i,j in zip(ii,jj):
d[i,j] = dat[n,3]
n += 1
现在 d
将会在由列 F
和 T
指定的位置上有 S
的值,而其他地方则是0。