I’m fairly new to Python, and very new to Numpy.
So far I have an ndarray of data where is a list of lists, and I have an array of indexes. How can I remove every row who’s index is inside of the array of indexes and put that row into a new ndarray?
For example, my data looks like
[[1 1 1 1]
[2 3 4 5]
[6 7 8 9]
[2 2 2 2]]
and my index array is
[0 2]
I would want two get two arrays, one of
[[1 1 1 1]
[6 7 8 9]]
and
[[2 3 4 5]
[2 2 2 2]]
Extended example, for clarity:
For example, my data looks like
[[1 1 1 1]
[2 3 4 5]
[6 7 8 9]
[2 2 2 2]
[3 3 3 3]
[4 4 4 4]
[5 5 5 5]
[6 6 6 6]
[7 7 7 7]]
and my index array is
[0 2 3 5]
I would want two get two arrays, one of
[[1 1 1 1]
[6 7 8 9]
[2 2 2 2]
[4 4 4 4]]
and
[[2 3 4 5]
[3 3 3 3]
[5 5 5 5]
[6 6 6 6]
[7 7 7 7]]
I have looked into numpy.take() and numpy.choose() but I could not figure it out. Thanks!
edit: I should also add that my input data and index array are of variable length, depending on the data-sets. I would like a solution that would work for variable sizes.
Sorry, so you already have
takeand basically need the opposite oftake, you can get that with some indexing nicely:So you just create a boolean mask that is True wherever
bwould not select froma.There is actually already
np.splitwhich handles this (its pure python code, but that should not really bother you):split always includes the slice from
0:b[0]andb[0]:, I guess you can just slice them out of the results for simplicity. If you have regular splits of course (all the same size), you may just be better of with usingreshape.Note also that this returns views. So if you change those arrays you change the original unless you call
.copyfirst.