как вставить элемент в матрицу Numpy по индексам строк и столбцов - PullRequest
1 голос
/ 16 января 2020

Я хочу создать матрицу с Numpy, но мне нужно добавить каждый элемент по его индексам строк и столбцов.

, например:

my_matrix = np.matrix(np.zeros((5, 5))) 
my_matrix.insert(row_index=2, column_index=1, value=10)

output:
matrix([[0., 0., 0., 0., 0.],
    [10., 0., 0., 0., 0.],
    [0., 0., 0., 0., 0.],
    [0., 0., 0., 0., 0.],
    [0., 0., 0., 0., 0.]])

Как мне это сделать? который?

Ответы [ 2 ]

1 голос
/ 16 января 2020

Использование np.matrix не рекомендуется, если не считается устаревшим. Это редко требуется, за исключением некоторых случаев обратной совместимости.

In [1]: arr = np.zeros((5,5))                                                                    
In [2]: arr                                                                                      
Out[2]: 
array([[0., 0., 0., 0., 0.],
       [0., 0., 0., 0., 0.],
       [0., 0., 0., 0., 0.],
       [0., 0., 0., 0., 0.],
       [0., 0., 0., 0., 0.]])
In [3]: mat = np.matrix(arr)                                                                     
In [4]: mat                                                                                      
Out[4]: 
matrix([[0., 0., 0., 0., 0.],
        [0., 0., 0., 0., 0.],
        [0., 0., 0., 0., 0.],
        [0., 0., 0., 0., 0.],
        [0., 0., 0., 0., 0.]])

Индексирование одной строки arr создает массив 1d

In [5]: arr[2]                                                                                   
Out[5]: array([0., 0., 0., 0., 0.])

Индексирование одной строки mat создает 2d матрица с формой (1,5)

In [6]: mat[2]                                                                                   
Out[6]: matrix([[0., 0., 0., 0., 0.]])

Мы можем получить доступ к элементу в массиве 1d:

In [7]: arr[2][1]                                                                                
Out[7]: 0.0

, но это индексирование mat пытается получить доступ к строка и выдает ошибку:

In [8]: mat[2][1]                                                                                
---------------------------------------------------------------------------
IndexError                                Traceback (most recent call last)
<ipython-input-8-212ad5378f8e> in <module>
----> 1 mat[2][1]
 ...
IndexError: index 1 is out of bounds for axis 0 with size 1

В обоих случаях лучше получить доступ к элементу с синтаксисом кортежа, чем к цепочечному:

In [9]: arr[2,1]                                                                                 
Out[9]: 0.0
In [10]: mat[2,1]                                                                                
Out[10]: 0.0

Это индексирование также работает для установки значений. Но старайтесь избегать повторения, чтобы установить отдельные значения. Попробуйте найти способы создания целого массива с нужными значениями напрямую, с помощью целых методов массива, а не итерации.

1 голос
/ 16 января 2020

Хотите добавить или вставить значения? Упомянутая вами функция добавления используется как поэлементное дополнение.

Пример:

np.add([1, 2], [2, 3])
Out[41]: array([3, 5])

Если вы действительно хотите создать матрицу матрицы, вставив значения с индексами столбцов и строк, сначала создайте матрицу, а затем вставьте значения.

number_rows = 10
number_cols = 20
arr = np.empty((number_rows, number_cols))
arr[2, 1] = 10
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...