我有大量的数据文件,格式与以下所述相同,我正在尝试以此绘制彩色网格图:
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.]]
下面是进一步说明它的图:
这是我的代码:
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
您能说明我在做什么吗?
谢谢!
答案 0 :(得分:1)
由于Matrix
是一个列表,并且试图使用tuple
,i,j
对其进行索引,因此您得到错误。那不是有效的操作。您可以使用integers
或slices
第二,您的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.]])