从带列的文本文件创建二维数组(Python)

-1 投票
3 回答
4142 浏览
提问于 2025-04-18 13:38

我刚开始学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
  1. 先把文件里的内容读进来,然后把所有的数据存成一个4行n列的矩阵,就像你说的那样。
  2. 接着,逐行遍历这个矩阵,把合适的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 将会在由列 FT 指定的位置上有 S 的值,而其他地方则是0。

撰写回答