【问题标题】:2D Array from a columned text file in python来自python中的列文本文件的二维数组
【发布时间】:2014-07-17 03:07:55
【问题描述】:

我是 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 的二维矩阵,这样它们将具有相应 T 和 F 值的 x 和 y 坐标(忽略 P)。我知道如何从文本创建矩阵,但这只是创建一个 4 x n 矩阵,其形式与文本文件相同。如何生成我需要的二维矩阵?

编辑:我的意思是忽略 P,而不是 S。

【问题讨论】:

  • 不清楚您要构建什么矩阵。 F 始终为 0,T 的范围为 0-3。这是否意味着您想要一个只有四个值的 (4,1) 矩阵?如果F 中有一个大于 0 的值怎么办,你希望矩阵中未定义的条目是什么?
  • 文件要长得多,最终有 F、T 和 P 中的值。
  • .... 你想要构建的矩阵的大小也是由TF 中的最大值决定的吗?
  • 是的,完全正确!所以每个 (T,F) 都会有一个 S 值。
  • 检查我的答案,我认为它可以满足您的需求。如果有帮助,请点击绿色检查接受它

标签: python arrays file numpy


【解决方案1】:

假设您的文本文件名为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。

【讨论】:

    【解决方案2】:

    这个样本怎么样:

    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

    “数据”现在包括 X y 坐标和值。你应该有你需要的一切

    【讨论】:

      【解决方案3】:
      1. 如您所说,读入文件并将所有数据保存到 4 x n 矩阵中。
      2. 然后循环遍历每一行并将适当的 S 或 P 值保存为 array[F][T]=S

      【讨论】:

      • 我该怎么做?
      猜你喜欢
      • 2012-11-23
      • 2013-11-08
      • 2020-02-04
      • 1970-01-01
      • 1970-01-01
      • 2019-03-16
      • 1970-01-01
      • 2022-07-12
      • 1970-01-01
      相关资源
      最近更新 更多