Numpy изменить форму массива с определенным порядком - PullRequest
0 голосов
/ 24 октября 2018

Допустим, у меня есть этот массив x:

x = array([1, 2, 3, 4, 5, 6, 7, 8])
x.shape = (8,1)

Я хочу изменить его, чтобы он стал

array([[1, 3, 5, 7], 
       [2, 4, 6, 8]])

, это изменение формы (2, 4) на x, но впрямой путь:

y = x.reshape(2,4)

у становится

array([[1, 2, 3, 4],
       [5, 6, 7, 8]])

и это не то, что я хочу.Есть ли способ преобразовать массив таким конкретным способом?

Ответы [ 4 ]

0 голосов
/ 24 октября 2018

Другой вариант - использовать опцию order='F' для повторного вызова, например

res = numpy.reshape(my_array, (2,4), order='F')

https://docs.scipy.org/doc/numpy-1.15.1/reference/generated/numpy.reshape.html

0 голосов
/ 24 октября 2018
In[4]: x.reshape(4, 2).T
Out[4]: 
array([[1, 3, 5, 7],
       [2, 4, 6, 8]])
0 голосов
/ 24 октября 2018

Самый простой способ сделать это - указать аргумент order в функции reshape.


Вам необходим ордер Фортрана.

Примечание: Matlab по умолчанию использует порядок Фортрана, но в python вам нужно указать это.


Используйте это:

x = np.array([1, 2, 3, 4, 5, 6, 7, 8])
y = x.reshape(2,4, order='F')

print(y)
#array([[1, 3, 5, 7],
#       [2, 4, 6, 8]])
0 голосов
/ 24 октября 2018

Да, вы можете сделать:

y = np.array([x[0::2], x[1::2]])
...