我正在尝试对数组进行排序并在python中将其分开。
示例:
我有一个这样的数据文件,我将导入:
x y z
1 3 83
2 4 38
8 1 98
3 87 93
4 1 73
1 3 67
9 9 18
1 4 83
9 3 93
8 2 47
我希望它首先看起来像这样:
x y z
1 3 83
1 3 67
1 4 83
2 4 38
3 87 93
4 1 73
8 1 98
8 2 47
9 9 18
9 3 93
因此x
列按升序排列,然后是y
列。
最后我想用这些数组构建一个数组?我能这样做吗?
所以我有:
array[0] = [[1, 3, 83],[1, 3, 67],[1, 4, 83]]
array[1] = [[2, 4, 38]]
array[2] = [[3, 87, 93]]
array[3] = [[4, 1, 73]]
array[4] = [[8, 1, 98],[8,2,47]]
依旧......
开始:
import numpy as np
import matplotlib.pyplot as plt
data_file_name = 'whatever.dat'
data=np.loadtxt(data_file_name)
答案 0 :(得分:1)
这是一个numpy解决方案(假设您使用它来加载数据):
import numpy as np
data_file_name = 'whatever.dat'
data = np.loadtxt(data_file_name,
skiprows=1,
dtype=[('x', float), ('y', float), ('z', float)])
data.sort(axis=0, order=['x', 'y', 'z'])
unique_x_col_vals = set(row[0] for row in data)
array = {n: [list(row) for row in data if row[0] == val]
for n, val in enumerate(unique_x_col_vals)}
>>> array
{0: [[1.0, 3.0, 67.0], [1.0, 3.0, 83.0], [1.0, 4.0, 83.0]],
1: [[2.0, 4.0, 38.0]],
2: [[3.0, 87.0, 93.0]],
3: [[4.0, 1.0, 73.0]],
4: [[8.0, 1.0, 98.0], [8.0, 2.0, 47.0]],
5: [[9.0, 3.0, 93.0], [9.0, 9.0, 18.0]]}
它使用字典理解来生成数组,在内部使用列表推导来根据列x
提取每一行的唯一值。
我在导入数据时使用了浮点数,但如果匹配数据,也可以指定int。
答案 1 :(得分:0)
你可以使用pandas,只需几行代码:
df = pd.read_csv(txt, sep=r"\s*")
print df.sort(['x','y'], ascending=[True,True])