【发布时间】:2014-03-15 05:23:33
【问题描述】:
我在尝试将数组分配给另一个数组特定位置时收到此错误。 在创建简单列表并进行此类分配之前,我正在这样做。但是 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,但我不知道这样做是否会失去性能。
谢谢。
【问题讨论】:
-
收到什么错误?提供完整的追溯。