我一直在寻找这个,但我找不到任何帮助。我在制作一个我想要的大小的数组时遇到了一些麻烦。在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