Добавить матрицу вне цикла - PullRequest
1 голос
/ 14 марта 2019

У меня есть функция, которая дает мне матрицу 17 * 3 (float (17,3)).Я вызываю эту функцию снова и снова в цикле, я хочу добавить матрицы так, чтобы строк оставалось 17, а столбец продолжал добавляться, чтобы сделать одну большую матрицу.

Ответы [ 2 ]

0 голосов
/ 14 марта 2019

Ваша функция:

In [187]: def foo(i): 
     ...:     return np.arange(i,i+6).reshape(3,2) 
     ...:                                                                       

Итеративное построение списка массивов:

In [188]: alist = []                                                            
In [189]: for i in range(4): 
     ...:     alist.append(foo(i)) 
     ...:                                                                       
In [190]: alist                                                                 
Out[190]: 
[array([[0, 1],
        [2, 3],
        [4, 5]]), array([[1, 2],
        [3, 4],
        [5, 6]]), array([[2, 3],
        [4, 5],
        [6, 7]]), array([[3, 4],
        [5, 6],
        [7, 8]])]

Создание массива из этого списка:

In [191]: np.concatenate(alist, axis=1)                                         
Out[191]: 
array([[0, 1, 1, 2, 2, 3, 3, 4],
       [2, 3, 3, 4, 4, 5, 5, 6],
       [4, 5, 5, 6, 6, 7, 7, 8]])
0 голосов
/ 14 марта 2019

без NUMPY:

Сначала транспонируйте матрицу, потому что вы не собираетесь касаться 17 строк.

# a matrix is 17 * 3
a_transpose = [[a[j][i] for j in range(len(a))] for i in range(len(a[0]))] 

Затем добавьте столбец из 17 строк как один ряд из 17 столбцов

a_transpose.append([1,2,3, ... 17])

Как только вы закончите добавлять несколько строк, транспонируйте матрицу обратно, как сказано выше. Таким образом, вы не перебираете свой массив 17 раз каждый раз, когда добавляете столбец в матрицу.

С NUMPY:

Транспонирование

# a matrix is 17 * 3
a = numpy.array(a)
a_transpose = a.transpose()

Добавить строку (17 значений столбца, которые вы хотите добавить)

a_transpose.append([1,2,3, .... 17], axis=0)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...