numpy 在Python中从txt文件计算数组的平均值

qf9go6mv  于 2023-08-05  发布在  Python
关注(0)|答案(2)|浏览(122)

我试图计算Test.txt中数组的平均值。但我得到一个错误。我给出了Test.txt的内容以及预期的输出。

import ast
import numpy as np

file_path = "C:/Users/USER/OneDrive - Technion/Research_Technion/Python_PNM/Basics/Velocity_Average/Test.txt"
with open(file_path) as f:
    content = f.read()
    data = ast.literal_eval(content)

for arr in data:
    arr = np.array(arr)  # Convert the array to a NumPy array
    filtered_data = arr[arr > 1e-9]  # Filter elements greater than 1e-9
    mean = np.mean(filtered_data)
    print(mean)

字符串
Test.txt的内容是

[array([[1.0],
       [2.0],
       [3.0],
       [4.0],
       [1e-12]])]
[array([[1.0],
       [2.0],
       [3.0],
       [4.0],
       [1e-12]])]


错误是

line 7
    [array([[1.0],
    ^
SyntaxError: invalid syntax


预期输出为

[2.5,2.5]

iklwldmw

iklwldmw1#

在您的文件中,您可以在成对的括号之间使用Python列表的字符串表示。字面量 array 是不相关的。
您可以使用正则表达式隔离列表。

from re import compile
from ast import literal_eval

FILENAME = '/Volumes/G-Drive/foo.txt'
PATTERN = compile(r'(?<=\().+?(?=\))')

output = []

with open(FILENAME) as data:
    content = ''.join(map(str.rstrip, data))
    for m in PATTERN.findall(content):
        if (lst := literal_eval(m)):
            total = sum(e[0] for e in lst)
            mean = total / len(lst)
            output.append(mean)

print(output)

字符串

输出:

[2.0000000000002, 2.0000000000002]

备注:

该输出与OP的要求不同,但实际上表示列表中的正确平均值

xurqigkl

xurqigkl2#

另一种可能的解决方案:

data = [ast.literal_eval(x) for x in content.replace(
    '\n', '').replace('[array(', '').split(')]') if x]
[np.array(d)[np.array(d) > 1e-9].mean() for d in data]

字符串
输出量:

[2.5, 2.5]

相关问题