我一直在尋找這個,但我找不到任何幫助。我在製作一個我想要的大小的數組時遇到了一些麻煩。在Python中將列表列表轉換爲數組
到目前爲止,我已經創建了一個列表的列表與此代碼:
n=4
def matrixA(k):
A=[]
for m in range(0,k):
row=[]
#A.append([])
for n in range(0,k):
if (n==(m+1)) or (n==(m-1)):
row.append(-deltaX/(deltaX)**2)
if (n==m):
row.append(2*deltaX/(deltaX)**2)
else:
row.append(0)
A.append(row)
return A
pprint.pprint(matrixA(n))
print len(matrixA(n))
我得到這個輸出。
[[128.0, -64.0, 0, 0, 0],
[-64.0, 0, 128.0, -64.0, 0, 0],
[0, -64.0, 0, 128.0, -64.0, 0],
[0, 0, -64.0, 0, 128.0]]
4
現在,我想使這個數組的大小(4,4)。我的問題是,當我這樣做(列表轉換爲一個數組,並試圖塑造它):
A=numpy.array(matrixA(n))
print A
print "This is its shape:",A.shape
A.shape=(n,n)
我獲得:
[[128.0, -64.0, 0, 0, 0] [-64.0, 0, 128.0, -64.0, 0, 0]
[0, -64.0, 0, 128.0, -64.0, 0] [0, 0, -64.0, 0, 128.0]]
This is its shape: (4,)
然後一個錯誤:
ValueError: total size of new array must be unchanged
我該如何從這裏得到一個大小爲(4,4)的數組呢?
您的清單有5或6個元素,您打算如何將其製作成4x4陣列?另外,由於列表中元素的數量不同,'numpy'不會創建2D數組,而是會創建一個由d列= object組成的1D數組。 – fjarri
哇,我不敢相信我沒注意到。你知道爲什麼這裏有5或6個,而不是5個?(我也改變了從k到k-1的範圍,因爲你指出這是因爲我希望它是4而不是5,謝謝。) –
我猜想循環內的第二個'if'應該是'elif '。目前您在一次迭代中有時會追加到'row'兩次。另外,你正在覆蓋'n',不知道你是否想要。 – fjarri