矩阵的次要

时间:2013-05-10 09:18:55

标签: python arrays numpy attributes

我正在写函数来计算矩阵

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 个答案:

答案 0 :(得分:1)

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

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

am = numpy.array(values_float, dtype=float)

答案 1 :(得分:1)

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

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

答案 2 :(得分:0)

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

在您的班级MyClass中,在__init__()中,您为班级的实例定义了一个属性attr。在某些方法中,您要访问此属性。您可以在MyClass类型的对象上调用此方法,例如myObj。但是不是做myObj.attr,而是调用MyClass.attr。你的班级没有属性。该课程的实例。

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

答案 3 :(得分:0)

是一个二维数组吗?如果你没有numpy,你可以像这样计算未成年人:

def minor(arr, i, j):
    minor = [row[:j] + row[j+1:] for row in (arr[:i] + arr[i+1:])]
    return minor