我对这个程序的意图是得到一个带有特定值的4x4矩阵,但由于某种原因,循环将所有内容放在同一行/列中......关于我的代码有什么不对?
def matrixH0(k):
H0=[]
print H0
for m in range (0,k):
for n in range (0,k):
if abs(m-n)==1:
H0.append(math.sqrt(n+m+1)/2.)
else:
H0.append(0)
print H0
这是我的输出:
[0,
0.7071067811865476,
0,
0,
0.7071067811865476,
0,
1.0,
0,
0,
1.0,
0,
1.224744871391589,
0,
0,
1.224744871391589,
0]
答案 0 :(得分:2)
将行附加到H0
,将值附加到行:
import math
import pprint
def matrixH0(k):
H0 = []
for m in range(k):
# create a new row
row = []
for n in range(k):
if abs(m-n)==1:
row.append(math.sqrt(n+m+1)/2.)
else:
row.append(0)
H0.append(row)
return H0
pprint.pprint(matrixH0(4))
产量
[[0, 0.7071067811865476, 0, 0],
[0.7071067811865476, 0, 1.0, 0],
[0, 1.0, 0, 1.224744871391589],
[0, 0, 1.224744871391589, 0]]
顺便说一下,matrixH0
也可以使用嵌套的list comprehensions编写:
def matrixH0(k):
return [[math.sqrt(n+m+1)/2. if abs(m-n)==1 else 0 for n in range(k)]
for m in range(k)]
答案 1 :(得分:1)
您永远不会在代码中创建多维数组,只需附加到单个列表即可。这是一个解决方案:
def matrixH0(k):
H0=[]
print H0
for m in range (0,k):
H0.append([])
for n in range (0,k):
if abs(m-n)==1:
H0[m].append(math.sqrt(n+m+1)/2.)
else:
H0[m].append(0)
print H0
答案 2 :(得分:1)
在第一个循环上初始化行,并将数字附加到第一个循环索引
下的数组中def matrixH0(k):
H0=[]
print H0
for m in range (0,k):
H0.append([])
for n in range (0,k):
if abs(m-n)==1:
H0[m].append(math.sqrt(n+m+1)/2.)
else:
H0[m].append(0)
print H0
答案 3 :(得分:0)
您找到了正确的功能
def matrixH0(k):
H1=[]
k=4
print H1
for m in range (0,k):
H0=[]
for n in range (0,k):
if abs(m-n)==1:
H0.append(math.sqrt(n+m+1)/2.)
else:
H0.append(0)
H1.append(H0)
return H1
[[0,0.7071067811865476,0,0],[0.7071067811865476,0,1.0,0],[0,1.0,0,1.224744871391589],[0,0,1.224744871391589,0]]
答案 4 :(得分:0)
我认为Raulucco的答案会奏效。但是如果你使用数字和矩阵,numpy肯定是你想要的模块。
您的代码看起来像
import numpy
H0 = numpy.diag([math.sqrt(n + 1) for n in xrange(k - 1)], 1) + \
numpy.diag([math.sqrt(n) for n in xrange(k - 1)], -1)