如何读取文件并将内容存储到2D矩阵中?

时间:2019-12-22 20:48:48

标签: python numpy matplotlib matrix

我有大量的数据文件,格式与以下所述相同,我正在尝试以此绘制彩色网格图:

0 0 1 2 
-3 1 7 7 
-2 1 2 3 
-1 1 7 3 
第一行的

[0 1 2]是图的y轴的值,第一列的[-3 -2 -1]是同一图的x值的值。第一个0仅用于空格

这些是我在pcolormesh中真正想要的数字:

1 7 7
1 2 3
1 7 3

我正在尝试读取这些值并将其存储为2D矩阵,如下所示:

Matrix = [[1.  7.  7.]
          [1.  2.  3.]
          [1.  7.  3.]]

下面是进一步说明它的图:

enter image description here

这是我的代码:

import numpy as np
import matplotlib.pyplot as plt

# ------------- Input Data Files ------------- # 

data = np.loadtxt('my_colormesh_data.dat')  # Load Data File

# ------ Transform Data into 2D Matrix ------- # 
Matrix = []

n_row = 4                                   # Number of rows counting 0 from file   #
n_column = 4                                # Number of columns couting 0 from file # 

x = data[range(1,n_row),0]                  # Read x axis values from data file and store in a variable #  
y = data[0, range(1,n_column)]              # Read y axis values from data file and store in a variable #
print(data)

print('\n', x)                              # print values of x (for checking)
print('\n', y)                              # print values of y (for checking)


for i in range (2, n_row):
    for j in range(2, n_column):
        print(i, j, data[i,j])              # print values of i, j and data (for checking)
        Matrix[i,j] = data[i,j]

print(Matrix)     

并导致此错误:

Matrix[i,j] = data[i,j]
TypeError: list indices must be integers or slices, not tuple

您能说明我在做什么吗?

谢谢!

1 个答案:

答案 0 :(得分:1)

由于Matrix是一个列表,并且试图使用tuplei,j对其进行索引,因此您得到错误。那不是有效的操作。您可以使用integersslices

对列表进行索引

第二,您的data变量已经是一个2D数组。您无需进行任何其他转换。

为了跳过第一行和第一列,您可以简单地使用索引切片。

>>> input_data = """0 0 1 2
... -3 1 7 7
... -2 1 2 3
... -1 1 7 3 """
>>>
>>> data = np.loadtxt(StringIO(input_data))
>>> data
array([[ 0.,  0.,  1.,  2.],
       [-3.,  1.,  7.,  7.],
       [-2.,  1.,  2.,  3.],
       [-1.,  1.,  7.,  3.]])

>>> data[1:,1:]
array([[1., 7., 7.],
       [1., 2., 3.],
       [1., 7., 3.]])