我正在尝试将每2行和2列合并为一列。
我有这样的数据,并且存储在文本文件中
7.0 1042.3784354104064 1041.8736266399212 0.0
7.0 567.603384919274 566.8152346188947 0.0
8.0 709.5076838990026 709.3588638367074 0.0
8.0 386.811514883702 386.6412338380912 0.0
预期输出将是这样
1042.3784354104064 1041.8736266399212 567.603384919274 566.8152346188947
709.5076838990026 709.3588638367074 386.811514883702 386.6412338380912
答案 0 :(得分:1)
您可以创建将第一个列值映射到列表的字典,然后在遍历矩阵时填充这些列表:
from collections import defaultdict
matrix = [[7.0, 1042.3784354104064, 1041.8736266399212, 0.0],
[7.0, 567.603384919274, 566.8152346188947, 0.0],
[8.0, 709.5076838990026, 709.3588638367074, 0.0],
[8.0, 386.811514883702, 386.6412338380912, 0.0]]
dd = defaultdict(list)
for key, *values, discard in matrix:
dd[key].extend(values)
result = list(dd.values())
print(result)
# [[1042.3784354104064, 1041.8736266399212, 567.603384919274, 566.8152346188947],
# [709.5076838990026, 709.3588638367074, 386.811514883702, 386.6412338380912]]
这是一个基于this answer
的纯粹的numpy解决方案import numpy as np
mat = np.loadtxt('file.txt')
indices = np.cumsum(np.unique(mat[:, 0], return_counts=True)[1])[:-1]
result = np.array(np.split(mat[:, 1:-1], indices)).reshape((len(indices)+1, -1))
print(result)
# [[1042.37843541 1041.87362664 567.60338492 566.81523462]
# [ 709.5076839 709.35886384 386.81151488 386.64123384]]
答案 1 :(得分:0)
以下代码将转置一个列表列表,我相信这是您要的内容。如果您要删除一些行,可以修剪此new_data
。
raw_data = [[7.0, 1042.3784354104064, 1041.8736266399212, 0.0],
[7.0, 567.603384919274, 566.8152346188947, 0.0],
[8.0, 709.5076838990026, 709.3588638367074, 0.0],
[8.0, 386.811514883702, 386.6412338380912, 0.0]]
new_data = []
for i, data in enumerate(raw_data):
for j, d in enumerate(data):
if(i==0):
new_data.append([])
new_data[j].append(d)
print(new_data)