2013-05-10 95 views
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' 

有人知道我爲什麼得到它嗎?

回答

0

一個可能源出於此錯誤,一般來說:

MyClass類,在__init__(),你定義屬性attr爲您的類的實例。在某些方法中,您想要訪問此屬性。您可以在MyClass類型的對象上調用此方法,如myObj。但是不要做myObj.attr,你打電話給MyClass.attr。你的班級沒有任何屬性。類的實例做。

在你的情況下,shape是一個numpy數組的屬性,而你的輸入對象是一個列表。

+0

@liubov不知道爲什麼這是downvoted。從你最初解釋的內容來看,我的一般答案是造成這個AttributeError的一個非常可能的原因。沒有更多的代碼(在我發佈的時候),這很像是猜測。我在添加代碼後進行編輯。 – octoback 2013-05-10 12:36:45

+0

downvote不可能來自OP,誰沒有downvote特權。可能有人在編輯後出現。 – askewchan 2013-05-10 14:00:38

1

.shape是numpy數組的屬性,而您將它應用於Python列表。您可以將arr.shape[0](和arr.shape[1])分別替換爲您感興趣的列表的維度(您的案例中爲ij)。

或者,你可以從你的列表values_float一個初始化數組numpy的,因爲這樣的:

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

ARR是一個2維陣列?如果你沒有numpy,你可以像這樣計算未成年人:

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