我正在写函数来计算矩阵
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'
有人知道我为什么会这样做吗?
答案 0 :(得分:1)
.shape
是numpy数组的一个属性,同时将它应用于Python列表。您可以将arr.shape[0]
(和arr.shape[1]
分别)替换为您感兴趣的列表的维度(在您的情况下为i
或j
)。
或者,您可以从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
。你的班级没有属性。该课程的实例。
在您的情况下,shape
是numpy
数组的属性,而您的输入对象是列表。
答案 3 :(得分:0)
是一个二维数组吗?如果你没有numpy,你可以像这样计算未成年人:
def minor(arr, i, j):
minor = [row[:j] + row[j+1:] for row in (arr[:i] + arr[i+1:])]
return minor