Я получаю эту ошибку при попытке присвоить массив другой позиции определенного массива. Я делал это, прежде чем создавать простые списки и выполнять такое задание. Но Numpy быстрее, чем простые списки, и я пытался использовать его сейчас.
Проблема состоит в том, что у меня есть 2D-массив, в котором хранятся некоторые данные, и в моем коде у меня есть, например, для вычисления градиента для каждого значения позиции, поэтому я создаю другой 2D-массив, где каждая позиция хранит градиент для его значение.
import numpy as np
cols = 2
rows = 3
# This works
matrix_a = []
for i in range(rows):
matrix_a.append([0.0] * cols)
print matrix_a
matrix_a[0][0] = np.matrix([[0], [0]])
print matrix_a
# This doesn't work
matrix_b = np.zeros((rows, cols))
print matrix_b
matrix_b[0, 0] = np.matrix([[0], [0]])
Что происходит, потому что у меня есть класс, определяющий объект np.zeros((rows, cols)), который хранит информацию о некоторых данных, упрощая, например, данные изображений.
class Data2D(object):
def __init__(self, rows=200, cols=300):
self.cols = cols
self.rows = rows
# The 2D data structure
self.data = np.zeros((rows, cols))
В конкретном методе я должен вычислить градиент для этих данных, который является матрицей 2 x 2 (причина этого я бы хотел использовать ndarray, а не простой массив), и для этого я создаю еще один экземпляр этого объекта для хранения этих новых данных, в которых каждая точка (пиксель) должна сохранять свой градиент. Я использовал простые списки, которые работают, но я, хотя я мог бы получить некоторую производительность с помощью numpy.
Есть ли способ обойти это? Или лучший способ сделать такую вещь? Я знаю, что я могу определить тип массива object, но я не знаю, могу ли я потерять производительность, делая такую вещь.
Спасибо.