python - 嵌套 FOR 循环索引问题 - Python

标签 python for-loop numpy indexing

我在嵌套 for 循环中的索引时遇到问题。 Python 吐出一个索引错误,告诉我我的索引超出范围。

下面是我的代码和随后的错误:

from math import *
import numpy as np
from scipy import integrate
import matplotlib.pyplot as plt
import os

croot = 1
ctip = 1
span = 1
thetaroot = 0
thetatip = 0
a0root = 0.11
a0tip = 0.11
alpha = 0
alpha0root = -2.5
alpha0tip = -2.5
thetaroot = thetaroot * arctan(1.) / 45.
thetatip = thetatip * arctan(1.) / 45.
alpha = alpha * arctan(1.) / 45.
alpha0root = alpha0root * arctan(1.) / 45.
alpha0tip = alpha0tip * arctan(1.) / 45.
n = 10
theta = np.empty(n, dtype = object)
y = np.empty(n, dtype = object)
c = np.empty(n, dtype = object)
cl = np.empty(n, dtype = object)
alp = np.empty(n, dtype = object)
a = np.empty(n, dtype = object)
rhs = np.empty(n, dtype = object)
b = np.empty(n, dtype = object)
a = np.empty(n, dtype = object)
rhs = rhs[:,None]
b = b[:,None]
a = a[:,None]
#
# Define properties at n span stations
#
pi = 4. * arctan(1.)
for i in range(0,n):
    theta[i] = i * pi / (2. * n)
    y[i] = span * 0.5 * cos(theta[i])
    c[i] = croot + (ctip - croot) * y[i] * 2. / span
    alp[i] = alpha + thetaroot - (alpha0root + (alpha0tip - alpha0root + thetaroot - thetatip) * y[i] * 2. / span)
    a[i] = a0root + (a0tip - a0root) * y[i] * 2. / span

pi = 4. * arctan(1.)
# Set up 2n x 2n system of equations for A1, A3 , ... A2n-1
for j in range(0,n):
    mu = c[j] * a[j] / (4. * span); print('mu=',mu)
    rhs[j,0] = alp[j] * sin(theta[j]) * c[j] * a[j] / (4 * span)
    for i in range(0,n):
        l = 2 * i - 1
        b[j,i] = sin(l * theta[j]) * (mu * l + sin(theta[j]))

然后我收到错误:

---------------------------------------------------------------------------
IndexError                                Traceback (most recent call last)
<ipython-input-70-b5bd95e69bb5> in <module>()
     45     for i in range(0,n):
     46         l = 2 * i - 1
---> 47         b[j,i] = sin(l * theta[j]) * (mu * l + sin(theta[j]))
     48 
     49 

IndexError: index 1 is out of bounds for axis 1 with size 1

如何有效地调用这两个索引?在 MATLAB 中,b(j,i) 是正常语法。

感谢任何帮助,谢谢!

最佳答案

使用 n=10 调用 b = np.empty(n, dtype = object) 会创建一个一维数组,但您正在对其进行索引 (b[j,i]) 就好像它是一个二维数组一样。

要初始化 10 x 10 数组,您可以调用 b = np.empty([n, n], dtype = object)

编辑: 我没有注意到这个作业:b = b[:,None] 这就创造了这个:

>>> [[None]
 [None]
 [None]
 [None]
 [None]
 [None]
 [None]
 [None]
 [None]
 [None]]

这是一个二维数组,但尝试索引内部数组的第一个元素(仅包含 None)会导致错误。

关于python - 嵌套 FOR 循环索引问题 - Python,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27494855/

相关文章:

python - 从对角线开始将向量写入矩阵

python - 时间这样写怎么写

java - libgdx 中的 arraylist 出现错误

python - 沿多边形边界生成等距点,但 CW/CCW

arrays - 识别 Pandas DataFrame 列的类型 DataFrame 值的 numpy 数组

python - 对文件夹中的所有 CSV 重复相同的过程

python - 在Python中查找句子内的(可能是多个单词的)短语

python - 在 scikit learn 中训练具有不同特征维度的逻辑回归模型

python - 我应该从 "urllib.request.urlretrieve(..)"切换到 "urllib.request.urlopen(..)"吗?

java - 将数组返回到 main 方法