#python-3.x
#python #python-3.x
Вопрос:
У меня есть такой файл 4.1487753725 0.4897939031 -1.1544368391
4.2506913391 -0.7956710981 -1.3259877915
3.9695031790 -2.0510342090 -1.4046097748
3.4511646710 -3.2198662126 -1.5663430729
2.5153044314 -4.0864073852 -1.8261543415
1.3426382182 -4.6013891404 -2.0548734271
0.0357806676 -4.6784799702 -1.9373871780
-1.2266940176 -4.3033231617 -2.0028733656
3.7028052845 1.6723951131 -0.9012966155
2.5960399662 2.3563000246 -0.6873344353
1.3596707979 2.6502036973 -0.7101050335
0.0775001020 2.6467774205 -0.7896014849
-1.1666635197 2.2212285825 -1.0060401024
……..
я хочу сделать среднее значение первых 18 строк, а затем следующих оставшихся строк
Комментарии:
1. Не могли бы вы уточнить, вам нужно среднее значение каждые 18 строк или просто среднее значение первых 18 строк, а затем среднее значение всех строк после этого?
2. У меня есть файл с координатами XYZ длиной 36 строк, я хочу разделить эти 36 строк на две части, содержащие по 18 строк в каждом случае, и я хочу получить среднее значение этих 18 координат XYZ в обоих случаях.
Ответ №1:
Поскольку вы имеете дело с вводом-выводом, вам нужно будет прочитать в вашем файле данных и привести ваши данные к числовому типу. Вот усредненные первые 18 строк, а затем среднее значение оставшихся точек, предполагая, что ваши данные хранятся "data.txt"
и хранятся в том же каталоге, где выполняется этот код.
with open("data.txt", "r") as data_file:
data = [line.strip().split() for line in data_file.readlines()]
data = [[float(x) for x in line] for line in data]
first_18_avg = [[sum(x)/len(x) for x in zip(*data[:18])]]
avg_of_rest = [[sum(x)/len(x) for x in zip(*data[18:])]]
Если вам нужна функция, которая будет принимать средние значения каждые 18 строк, что мне кажется более разумным и что, как я предполагаю, вы имели в виду изначально:
def find_avg_xyz(data):
return [[sum(x)/len(x) for x in zip(*data)]]
avg_every_18_lines = []
a, b = 0, 18
for _ in range(len(data) // 18):
avg_every_18_lines.append(find_avg_xyz(data[a:b]))
a, b = b, b 18
Комментарии:
1. Спасибо за быстрый ответ, но дело в том, что у меня есть еще 50 файлов, содержащих те же данные, можно прочитать и выполнить те же вычисления для этих файлов без изменения имен файлов.
2. Что вы имеете в виду, «без изменения имен файлов»? Просто введите в него любые имена ваших файлов,
with open(...)
чтобы открыть любой файл, который вы хотите.3. Большое спасибо за ваши разъяснения. Это действительно полезно, половина моей проблемы решена.
Ответ №2:
помогает ли это?
input = [[1, 2, 2], [1, 2, 1], [1, 1, 1]]
average = [sum(x)/len(x) for x in zip(*input)]
print(average)
Комментарии:
1. У меня так много файлов, что я не могу выполнить [ , , ,] в каждом случае. Есть ли какой-либо другой способ решить эту проблему. и спасибо за помощь