在python中使用for循环向矩阵添加值

时间:2016-02-09 09:59:09

标签: python arrays multidimensional-array

我对这个程序的意图是得到一个带有特定值的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]

5 个答案:

答案 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)