Unexpected behavour when making array of 2D arrays, of similar dimension

后端 未结 2 1476
日久生厌
日久生厌 2021-01-21 09:10

MWE:

def showArrayOfList(a,b,c):
    wlist = [np.zeros((szNext,szThis)) for (szThis,szNext) in [(a,b),(b,b),(b,b),(b,c)]]

    print \"wlist:\",         


        
相关标签:
2条回答
  • 2021-01-21 09:27

    Simply printing out the arrays should fairly quickly allow you too see what happened.

    As to the question of where did the last dimension go. Since the size of that dimension has variable length. Numpy wont create a new dimension for it, it will simply create an array of objects (where the object is a list) of varying length.

    In the showArrayOfList(2,4,4) case your array looks like this:

    First row:
    [array([ 0., 0.]) array([ 0., 0.]) array([ 0., 0.]) array([ 0., 0.])]

    second to fourth row:
    [array([ 0., 0., 0., 0.]) array([ 0., 0., 0., 0.]) array([ 0., 0., 0., 0.]) array([ 0., 0., 0., 0.])]

    0 讨论(0)
  • 2021-01-21 09:40

    A more consistent way of creating wArray is to initialize it to a (4,) object array, and fill it term by term:

    n = len(wlist)
    wArray = np.empty((n,), dtype='O')
    for i in range(n):
        wArray[i] = wlist[i]
    

    This isn't as pretty as asarray(wlist), but it splits the 3 dimensions in the same 1,2 manner regardless of what a,b,c are.

    0 讨论(0)
提交回复
热议问题