代码之家  ›  专栏  ›  技术社区  ›  bru1987

以特定方式重塑python数组

  •  1
  • bru1987  · 技术社区  · 7 年前

    我正在编写一个python代码,这样我基本上可以用一个numpy数组来完成这项工作

    enter image description here

    我有一个Matlab代码

    A = [1:30]'; % Example matrix
    rows = 3;
    
    for i=1:(numel(A)-rows+1)
        B(1:rows,i)=A(i:i+rows-1,1);
    end
    

    或者,没有任何循环,

    B = conv2(A.', flip(eye(rows)));
    

    B = B(:, rows:end-rows+1);

    有人能帮我用Python做同样的事情吗?使用reforme函数没有帮助,因为我需要“镜像”这些值(而不仅仅是重新组织它们)。

    谢谢您。

    4 回复  |  直到 7 年前
        1
  •  2
  •   bobrobbob    7 年前

    不是很性感但不适合

    import numpy as np
    
    a = np.arange(1,31)
    b = np.arange(3).reshape(3,1)
    c = b+a[:28]
    

    尝试翻译你的Matlab代码

    import numpy as np
    from scipy.signal import convolve2d
    
    a = np.arange(1,31).reshape(1,30)
    b = np.flip(np.eye(3,28),0)
    c = convolve2d(a, b)[:,2:28]
    
        2
  •  0
  •   jpp    7 年前

    使用 np.ndarray.reshape :

    import numpy as np
    
    A = np.arange(1, 31)
    B = A.reshape((3, 10))
    
    print(B)
    
    [[ 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]]
    
        3
  •  0
  •   jpp    7 年前

    这是你的密码。

    import numpy as np
    
    A = np.array(list(range(1,31)))
    
    rows = 3
    
    new_A = np.zeros((rows,A.size-rows+1))
    
    for i in range(rows):
        new_A[i,:] = A[i:A.size-rows+i+1]
    
    print (new_A)    
    
        4
  •  0
  •   Martin    7 年前

    请尝试该代码段:

    import numpy as np
    start = 1
    end = 30
    b_dim = 28
    
    a = np.arange(start, end+1)
    b = np.zeros((3, b_dim))
    
    print("a = ", a)
    
    rows, _ = b.shape
    
    for row in range(rows):
        data = a[row:row+b_dim]
        b[row, :] = data
    
    print("b = ", b)
    

    资讯科技印刷

    ('a = ', array([ 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]))
    ('b = ', array([[  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.],
           [  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.],
           [  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.]]))