Issue
len_array = 10
A = np.zeros( len_array )
B = np.zeros( len_array )
A = np.arange(1, 5, 0.5)
B = np.arange(11, 15, 0.5)
A = A.tolist()
B = B.tolist()
I followed another post that did similar task, however it just insert elements in B into A. This method did not generate a new list C.
for i,v in enumerate(B):
A.insert(2*i+1,v)
How to create a new list C that merges A and B based on their even/odd elements?
Thanks.
Solution
In [194]: A = np.arange(1, 5, 0.5)
...: B = np.arange(11, 15, 0.5)
The list derived from A
is a copy. in-place changes to C
don't affect A
:
In [196]: C = A.tolist()
In [197]: for i,v in enumerate(B):
...: C.insert(2*i+1,v)
...:
In [198]: A
Out[198]: array([1. , 1.5, 2. , 2.5, 3. , 3.5, 4. , 4.5])
In [199]: B
Out[199]: array([11. , 11.5, 12. , 12.5, 13. , 13.5, 14. , 14.5])
In [200]: C
Out[200]:
[1.0,
11.0,
1.5,
11.5,
2.0,
12.0,
2.5,
12.5,
3.0,
13.0,
3.5,
13.5,
4.0,
14.0,
4.5,
14.5]
An array approach:
In [201]: np.vstack((A,B))
Out[201]:
array([[ 1. , 1.5, 2. , 2.5, 3. , 3.5, 4. , 4.5],
[11. , 11.5, 12. , 12.5, 13. , 13.5, 14. , 14.5]])
In [202]: np.vstack((A,B)).ravel(order='F')
Out[202]:
array([ 1. , 11. , 1.5, 11.5, 2. , 12. , 2.5, 12.5, 3. , 13. , 3.5,
13.5, 4. , 14. , 4.5, 14.5])
Or we could stack the arrays as columns and do the ordinary C
order ravel.
===
Another list way - use zip
to make list of lists, and itertools.chain
to flatten that:
In [203]: import itertools
In [204]: [(i,j) for i,j in zip(A,B)]
Out[204]:
[(1.0, 11.0),
(1.5, 11.5),
(2.0, 12.0),
(2.5, 12.5),
(3.0, 13.0),
(3.5, 13.5),
(4.0, 14.0),
(4.5, 14.5)]
In [205]: list(itertools.chain(*[(i,j) for i,j in zip(A,B)]))
Out[205]:
[1.0,
11.0,
1.5,
11.5,
2.0,
12.0,
2.5,
12.5,
3.0,
13.0,
3.5,
13.5,
4.0,
14.0,
4.5,
14.5]
Answered By - hpaulj
0 comments:
Post a Comment
Note: Only a member of this blog may post a comment.