将数组拆分为numpy中的值

时间:2011-03-11 14:37:45

标签: python numpy

我有一个包含以下格式的数据的文件:

0.0 x1
0.1 x2
0.2 x3
0.0 x4
0.1 x5
0.2 x6
0.3 x7
...

数据由多个数据集组成,每个数据集在第一列中以0开头(因此x1,x2,x3将是一组,x4,x5,x6,x7是另一组)。我需要分别绘制每个数据集,所以我需要以某种方式分割数据。最简单的方法是什么?

我意识到每次遇到第一列中的0时,我都可以逐行浏览数据并分割数据,但这似乎非常低效。

4 个答案:

答案 0 :(得分:24)

我实际上喜欢本杰明的答案,稍微简短的解决方案就是:

B= np.split(A, np.where(A[:, 0]== 0.)[0][1:])

答案 1 :(得分:14)

一旦你有一个长numpy数组中的数据,只需执行:

import numpy as np

A = np.array([[0.0, 1], [0.1, 2], [0.2, 3], [0.0, 4], [0.1, 5], [0.2, 6], [0.3, 7], [0.0, 8], [0.1, 9], [0.2, 10]])
B = np.split(A, np.argwhere(A[:,0] == 0.0).flatten()[1:])

这将为您提供包含三个数组B[0]B[1]B[2]的B(在这种情况下;我添加了第三个“部分”以向自己证明它工作正常)

答案 2 :(得分:1)

您不需要使用python循环来评估每个拆分的位置。对第一列进行差异,找出值减少的位置。

import numpy

# read the array
arry = numpy.fromfile(file, dtype=('float, S2'))

# determine where the data "splits" shoule be
col1 = arry['f0']
diff = col1 - numpy.roll(col1,1)
idxs = numpy.where(diff<0)[0]

# only loop thru the "splits"
strts = idxs
stops = list(idxs[1:])+[None]
groups = [data[strt:stop] for strt,stop in zip(strts,stops)]

答案 3 :(得分:0)

def getDataSets(fname):
    data_sets = []
    data = []
    prev = None
    with open(fname) as inf:
        for line in inf:
            index,rem = line.strip().split(None,1)
            if index < prev:
                data_sets.append(data)
                data = []
            data.append(rem)
            prev = index
        data_sets.append(data)
    return data_sets

def main():
    data = getDataSets('split.txt')
    print data

if __name__=="__main__":
    main()

结果

[['x1', 'x2', 'x3'], ['x4', 'x5', 'x6', 'x7']]