I apologize if this has been asked here – I’ve hunted around here and in the Tentative NumPy Tutorial for an answer.
I have 2 numpy arrays. The first array is similar to:
1 0 0 0 0
2 0 0 0 0
3 0 0 0 0
4 0 0 0 0
5 0 0 0 0
6 0 0 0 0
7 0 0 0 0
8 0 0 0 0
(etc… It’s ~700×10 in actuality)
I then have a 2nd array similar to
3 1
4 18
5 2
(again, longer – maybe 400 or so rows)
The first column of the 2nd array is always completely contained within the first column of the first array
What I’d like to do is to insert the 2nd column of the 2nd array into that first array as part of an existing column, i.e:
array a:
1 0 0 0 0
2 0 0 0 0
3 1 0 0 0
4 18 0 0 0
5 2 0 0 0
6 0 0 0 0
7 0 0 0 0
8 0 0 0 0
(I’d be filling in each of those columns in turn, but each covers a different range within the original)
My first try was along the lines of a[b[:,0],1]=b[:,1] which puts them into the indices of b, not the values (ie, in my example above instead of filling in rows 3, 4, and 5, I filled in 2, 3, and 4). I should have realized that!
Since then, I’ve tried to make it work pretty inelegantly with where(), and I think I could make it work by finding the difference in the starting values of the first columns.
I’m new to python, so perhaps I’m overly optimistic – but it seems like there should be a more elegant way and I’m just missing it.
Thanks for any insights!
If the numbers in the first column of
aare in sorted order, then you could useFor example:
yields
(I changed your example a bit to show that the values in
b‘s first column do not have to be contiguous.)If
a[:,0]is not in sorted order, then you could usenp.argsortto workaround this:yields