【问题标题】:Python creating matrix using if condition on indices : incorrect resultPython在索引上使用if条件创建矩阵:不正确的结果
【发布时间】:2016-11-01 06:26:08
【问题描述】:

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

#!/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 不允许这样做吗?

【问题讨论】:

标签: python arrays matrix


【解决方案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

【讨论】:

    【解决方案2】:

    elif j-1==1: 应该是elif j-i==1:

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

    【讨论】:

    • 谢谢。我怎么能犯这样的错误?我投票删除我的帖子。非常抱歉。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-08-14
    • 1970-01-01
    • 1970-01-01
    • 2013-04-15
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多