我试图将文本文件中的数据读入2D数组,然后访问数据的每个元素。我尝试了许多不同的方法,但我无法访问数据的每个元素,
这是数据的摘录,
GRID 16 7.5 5.961539 0.
GRID 17 7.5 11.92308 0.
GRID 18 7.5 17.88461 0.
GRID 19 7.5 23.84615 0.
GRID 20 7.5 29.80769 0.
GRID 21 7.5 35.76923 0.
GRID 22 7.5 41.73077 0.
GRID 23 7.5 47.69231 0.
GRID 24 7.5 53.65384 0.
使用这里的例子,Import nastran nodes deck in Python using numpy
它导入OK,但它作为一维数组,我就是[1,1]',例如,我得到以下响应,
x[1,1]
Traceback (most recent call last):
File "<ipython-input-85-3e593ebbc211>", line 1, in <module>
x[1,1]
IndexError: too many indices for array
我希望的是,
17
我也尝试了以下代码,再次将其读入1D数组,
ary = []
with open(os.path.join(dir, fn)) as fi:
for line in fi:
if line.startswith('GRID'):
ary.append([line[i:i+8] for i in range(0, len(line), 8)])
我收到以下错误,
ary[1,2]
Traceback (most recent call last):
File "<ipython-input-83-9ac21a0619e9>", line 1, in <module>
ary[1,2]
TypeError: list indices must be integers or slices, not tuple
我是Python的新手,但我确实有很多使用数组的VBA经验,但我很难理解如何加载数组以及如何访问特定数据。
你可以使用genfromtxt
功能。
import numpy as np
ary = np.genfromtxt(file_name, dtype=None)
这将自动加载您的文件并检测字段类型。现在,您可以按行或按列访问ary
In: ary['f1']
Out: array([16, 17, 18, 19, 20, 21, 22, 23, 24])
In: ary[2]
Out: (b'GRID', 18, 7.5, 17.88461, 0.)
或单个元素:
In: ary[3]['f1']
Out: 19
In: ary['f1'][3]
Out: 19
您是从文本文件导入它?你能把文本文件保存为csv吗?如果是这样,您可以使用pandas轻松加载数据。
import pandas as pd
data = pd.read_csv(path_to_file)
此外,您可能需要使用以下内容重塑您的numpy数组:
x = x.reshape(-1, 4)
编辑:由于您的格式基于固定宽度,您可能希望在pandas而不是read_csv中使用固定宽度。下面的示例使用宽度8。
x = pd.read_fwf(path_to_file, widths=8)