Split Array At Value In Numpy
I have a file containing data in the format: 0.0 x1 0.1 x2 0.2 x3 0.0 x4 0.1 x5 0.2 x6 0.3 x7 ... The data consists of multiple datasets, each starting with 0 in the first column
Solution 1:
I actually liked Benjamin's answer, a slightly shorter solution would be:
B= np.split(A, np.where(A[:, 0]== 0.)[0][1:])
Solution 2:
Once you have the data in a long numpy array, just do:
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:])
which will give you B containing three arrays B[0]
, B[1]
and B[2]
(in this case; I added a third "section" to prove to myself that it was working correctly).
Solution 3:
You don't need a python loop to evaluate the locations of each split. Do a difference on the first column and find where the values decrease.
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)]
Solution 4:
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 dataif __name__=="__main__":
main()
results in
[['x1', 'x2', 'x3'], ['x4', 'x5', 'x6', 'x7']]
Post a Comment for "Split Array At Value In Numpy"