Изменение формы массива Python определенным образом

1

Я работаю над кодом Python, чтобы в принципе сделать это с помощью массива Numpy

Изображение 174551

У меня есть код 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? Использование функции reshape не помогает, так как мне нужно "зеркалировать" значения (и не только реорганизовывать их).

Спасибо.

Теги:
arrays
numpy
reshape
matrix

4 ответа

2
Лучший ответ

не очень сексуальный, но не для

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]
0

Использование 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]]
0

Попробуйте этот фрагмент кода:

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.]]))
  • 0
    это мой неаккуратный 8 =)
  • 0
    ээээ, теперь я вижу. простите за это..
Показать ещё 1 комментарий
0

Это код для вас.

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)    

Ещё вопросы

Сообщество Overcoder
Наверх
Меню