我在尝试将一个数组分配给另一个特定位置的数组时,遇到了这个错误。在创建简单列表并进行此类赋值之前,我一直在这样做。但是Numpy比简单列表更快,所以我现在想使用它。
问题是因为我有一个存储某些数据的二维数组,在我的代码中,例如,我需要计算每个位置值的梯度,因此我创建另一个二维数组,其中每个位置存储其值的梯度。
在一种特定的方法中,我需要计算这个数据的梯度,它是一个2x2的矩阵(因此我想使用ndarray而不是简单的array),为了做到这一点,我创建了另一个该对象的实例来存储这些新数据,其中每个点(像素)应该存储它的梯度。我一直在使用简单的列表,这样可以工作,但我认为我可以通过numpy获得更好的性能。有没有办法解决这个问题?或者更好的做法?我知道可以将数组类型定义为object,但我不知道这样做是否会降低性能。谢谢。
问题是因为我有一个存储某些数据的二维数组,在我的代码中,例如,我需要计算每个位置值的梯度,因此我创建另一个二维数组,其中每个位置存储其值的梯度。
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))
在一种特定的方法中,我需要计算这个数据的梯度,它是一个2x2的矩阵(因此我想使用ndarray而不是简单的array),为了做到这一点,我创建了另一个该对象的实例来存储这些新数据,其中每个点(像素)应该存储它的梯度。我一直在使用简单的列表,这样可以工作,但我认为我可以通过numpy获得更好的性能。有没有办法解决这个问题?或者更好的做法?我知道可以将数组类型定义为object,但我不知道这样做是否会降低性能。谢谢。