我有以下代码,我一直在尝试使用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从不允许这样做吗?
答案 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