Python使用if条件索引创建矩阵:结果不正确

时间:2016-06-29 13:41:48

标签: python arrays matrix

我有以下代码,我一直在尝试使用x - 条件创建三对角矩阵if

#!/usr/bin/env python

# import useful modules
import numpy as np


N=5
x=np.identity(N)
#x=np.zeros((N,N))
print x

# Construct NxN matrix 
for i in range(N):
     for j in range(N):
        if i-j==1:
            x[i][j]=1 
        elif j-1==1:
            x[i][j]=-1
        else:
            x[i][j]=0

            print "i= ",i," j= ",j          


print x

我希望得到

[[ 0.  -1. 0.  0.  0.]
 [ 1.  0. -1.  0.  0.]
 [ 0.  1.  0.  -1  0.]
 [ 0.  0.  1.  0.  -1.]
 [ 0.  0.  0.  1.  0.]]

然而,我获得了

[[ 0.  0. -1.  0.  0.]
 [ 1.  0. -1.  0.  0.]
 [ 0.  1. -1.  0.  0.]
 [ 0.  0.  1.  0.  0.]
 [ 0.  0. -1.  1.  0.]]

出了什么问题?

额外问题:在这个例子中,我可以强制索引从1到5而不是0到4,或者Python从不允许这样做吗?

2 个答案:

答案 0 :(得分:1)

elif j-1==1:应为elif j-i==1:

不,列表/数组等总是从0索引。

答案 1 :(得分:1)

至于奖金问题, Python中序列的第一个元素始终是索引0 。但是,如果由于某些特定原因(例如,为了防止逐个错误),您希望从0以外的值计算序列的元素,则可以使用内置函数enumerate()并设置可选参数start的值以满足您的需求:

>>> seq = ['a', 'b', 'c']
>>> for count, item in enumerate(seq, start=1):
...     print count, item
...
1 a
2 b
3 c