1

I have a 2d array of numbers coming from a csv

this is just a example of the data shape

[[ 0  1  2  3  4  5  6  7  8  9]
 [10 11 12 13 14 15 16 17 18 19]
 [20 21 22 23 24 25 26 27 28 29]
 [30 31 32 33 34 35 36 37 38 39]
 [40 41 42 43 44 45 46 47 48 49]
 [50 51 52 53 54 55 56 57 58 59]
 [60 61 62 63 64 65 66 67 68 69]
 [70 71 72 73 74 75 76 77 78 79]
 [80 81 82 83 84 85 86 87 88 89]
 [90 91 92 93 94 95 96 97 98 99]]

Im learning to use numpy, my goal is to convert that 2d array into a 3d array of shape (10,2,4) for example

index 0

[[ 0  1  2  3  4  5  6  7  8  9]
 [10 11 12 13 14 15 16 17 18 19]]

index 1

 [[20 21 22 23 24 25 26 27 28 29]
 [30 31 32 33 34 35 36 37 38 39]]

index 2

 [[40 41 42 43 44 45 46 47 48 49]
 [50 51 52 53 54 55 56 57 58 59]]

index 3

 [[60 61 62 63 64 65 66 67 68 69]
 [70 71 72 73 74 75 76 77 78 79]]

index 4

 [[80 81 82 83 84 85 86 87 88 89]
 [90 91 92 93 94 95 96 97 98 99]]

I can do this by using a loop, but i wonder if there is a better way

also concatenating rows in one column would also work

my goal is to fit a keras model where a single sample is composed of multiple rows of a dataframe

2

1 Answer 1

2

You can use slicing and list comprehension

>>> src = [[ 0,  1,  2,  3,  4,  5,  6,  7,  8,  9],
 [10, 11, 12, 13 ,14 ,15 ,16 ,17 ,18 ,19],
 [20, 21, 22, 23 ,24 ,25 ,26 ,27 ,28 ,29],
 [30, 31, 32, 33 ,34 ,35 ,36 ,37 ,38 ,39],
 [40, 41, 42, 43 ,44 ,45 ,46 ,47 ,48 ,49],
 [50, 51, 52, 53 ,54 ,55 ,56 ,57 ,58 ,59],
 [60, 61, 62, 63 ,64 ,65 ,66 ,67 ,68 ,69],
 [70, 71, 72, 73 ,74 ,75 ,76 ,77 ,78 ,79],
 [80, 81, 82, 83 ,84 ,85 ,86 ,87 ,88 ,89],
 [90, 91, 92, 93 ,94 ,95 ,96 ,97 ,98 ,99]]

>>> [src[i:i+2] for i in range(0,len(src),2)]
[[[0, 1, 2, 3, 4, 5, 6, 7, 8, 9], [10, 11, 12, 13, 14, 15, 16, 17, 18, 19]],
 [[20, 21, 22, 23, 24, 25, 26, 27, 28, 29],
  [30, 31, 32, 33, 34, 35, 36, 37, 38, 39]],
 [[40, 41, 42, 43, 44, 45, 46, 47, 48, 49],
  [50, 51, 52, 53, 54, 55, 56, 57, 58, 59]],
 [[60, 61, 62, 63, 64, 65, 66, 67, 68, 69],
  [70, 71, 72, 73, 74, 75, 76, 77, 78, 79]],
 [[80, 81, 82, 83, 84, 85, 86, 87, 88, 89],
  [90, 91, 92, 93, 94, 95, 96, 97, 98, 99]]]

Hope this answer your question

Edit : I re-read your question and look for the comment that @Anshumaan-mishra mention. You can also use numpy reshape.

>>> import numpy as np
>>> src = np.reshape(src,(5, 2, 10))
array([[[ 0,  1,  2,  3,  4,  5,  6,  7,  8,  9],
        [10, 11, 12, 13, 14, 15, 16, 17, 18, 19]],

       [[20, 21, 22, 23, 24, 25, 26, 27, 28, 29],
        [30, 31, 32, 33, 34, 35, 36, 37, 38, 39]],

       [[40, 41, 42, 43, 44, 45, 46, 47, 48, 49],
        [50, 51, 52, 53, 54, 55, 56, 57, 58, 59]],

       [[60, 61, 62, 63, 64, 65, 66, 67, 68, 69],
        [70, 71, 72, 73, 74, 75, 76, 77, 78, 79]],

       [[80, 81, 82, 83, 84, 85, 86, 87, 88, 89],
        [90, 91, 92, 93, 94, 95, 96, 97, 98, 99]]])

I answer with my code above because I'm focusing on the data structure that you want

Sign up to request clarification or add additional context in comments.

Comments

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.