Как изменить размер матрицы без использования изменения формы в Python - PullRequest
0 голосов
/ 12 октября 2018

Ниже приведена матрица (3 * 3)

a_matrix=np.array([[2,3,5],[3,2,7],[1,4,2]]) 

, и я хочу изменить ее на (9 * 1), которая равна

[[2],[3],[5],[3],[2],[7],[1],[4],[2]]

Проблема заключается в том, что янужно сделать это без использования метода изменения формы в NumPy.Кстати, ниже то, что я сделал, что-то не так.Может ли кто-нибудь помочь мне с этим?Кстати, ** я не могу использовать эти предопределенные методы, чтобы сделать это, я должен реализовать это своим собственным методом.**. Любая помощь приветствуется !!!

import numpy as np   
a_list=[]
a_matrix=np.array([[2,3,5],[3,2,7],[1,4,2]]) #3*3 matrix
for i in range(3):
   a_list.extend(a_matrix[i,:])
a_list=np.asarray(a_list) #To convert the list to numpy array
print(a_list.T.shape) #To print the shape of transpose

---> (9,) # Я хочу (9,1), а не (9,)

Ответы [ 4 ]

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

Чистая операция со списком:

In [122]: alist = [[2,3,5],[3,2,7],[1,4,2]]
In [123]: [[i] for x in alist for i in x]
Out[123]: [[2], [3], [5], [3], [2], [7], [1], [4], [2]]

Забудьте о np.array вещах до или после.Если вы не можете использовать reshape, нет смысла говорить о numpy.shape является неотъемлемой частью массива numpy, и его изменение с помощью reshape является фундаментальной операцией.

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

Вы можете использовать np.ravel и впоследствии добавить фиктивную ось.

l_list = a_matrix.ravel()[:,None]

РЕДАКТИРОВАТЬ: Если вы хотите метод без пуховиков:

l_list = []
for i in range(3):
    for j in range(3):
        # replace [i][j] with [i,j] if a_matrix
        # is allowed to be a numpy array
        l_list.append([a_matrix[i][j]])

Если вы хотите иметьрезультат в виде массива без использования ravel или reshape, вы можете заранее создать выходной массив

l_list = np.empty((9,1))
for i in range(3):
    for j in range(3):
        # replace [i][j] with [i,j] if a_matrix
        # is allowed to be a numpy array
        l_list[i*3 + j] = a_matrix[i][j]
0 голосов
/ 12 октября 2018

Вот ответ, в котором вы сами кодируете решение (в соответствии с вашими требованиями к назначению).

import numpy as np

a_matrix = np.array([[2,3,5],[3,2,7],[1,4,2]])

a_list = [[elem] for row in a_matrix for elem in row]

a_list = np.asarray(a_list) 
print(a_list.T.shape) 

Вывод должен быть ожидаемым.

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

Сгладьте его и используйте понимание списка

result = np.array([[x] for x in a_matrix.ravel()])
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...