1

我正在编写用于计算矩阵次要的函数

def minor(arr,i,j):
    return arr[np.array(range(i)+range(i+1,arr.shape[0]))[:,np.newaxis],  
               np.array(range(j)+range(j+1,arr.shape[1]))]

然后将其应用于我初始化的数组:

for row in values_float:
    for item in row:
        am[p][k] = item

但我收到一个错误:

AttributeError: 'list' object has no attribute 'shape'

有人知道我为什么得到它吗?

4

4 回答 4

1

.shape是 numpy 数组的属性,而您将其应用于 Python 列表。您可以将arr.shape[0](和arr.shape[1],分别)替换为您感兴趣的列表维度(ij,在您的情况下)。

或者,您可以从values_float列表中初始化一个 numpy 数组,如下所示:

am = numpy.array(values_float, dtype=float)
于 2013-05-10T09:27:28.660 回答
1

我认为在 numpy 中初始化数组的最佳方法是使用 numpy.ndarray 或 numpy.zeros ,而不是使用您的操作方式和初始化列表的方式。

http://docs.scipy.org/doc/numpy/reference/generated/numpy.ndarray.html

于 2013-05-10T10:09:18.373 回答
0

通常,此错误的可能来源:

在您的类MyClass__init__(),您为类的实例定义一个属性attr。在某些方法中,您希望访问此属性。你在一个类型的对象上调用这个方法MyClass,比如说myObj。但不是执行 myObj.attr,而是调用MyClass.attr. 你的班级没有属性。类的实例可以。

在您的情况下,shapenumpy数组的属性,而您的输入对象是列表。

于 2013-05-10T09:24:48.387 回答
0

arr 是二维数组吗?如果你没有 numpy,你可以像这样计算次要:

def minor(arr, i, j):
    minor = [row[:j] + row[j+1:] for row in (arr[:i] + arr[i+1:])]
    return minor
于 2016-10-05T16:18:25.163 回答