你如何使用numpy数组中的索引进行计算

时间:2014-03-08 00:04:45

标签: python arrays numpy

所以我希望perimeterpoints函数能够工作,但我不知道如何运行我的数组的索引。我认为我的数组的len可以工作,但它说'in'对象是不可迭代的。所以如果我有10个点会产生0到9的索引。

import math as m
import numpy as np
def ball(numpoints):
    rr = 5. #radius of the ball
    xx = np.linspace(-5,5,numpoints) #x coordinates
    yy = np.array([m.sqrt(rr**2 - xxi**2) for xxi in xx]) #y coordinates
    perimeterpoints = np.array([m.sqrt((xx[i+1]-xx[i])**2+(yy[i+1]-yy[i])**2) for i in range(len(xx)-1)])
    perimeter = sum(perimeterpoints)
    return(perimeter)

提前致谢

修改

我想我明白了。我把range()放在len(xx)-1附近,我在上面的代码中修复了它。我得到了正确的答案

1 个答案:

答案 0 :(得分:1)

使用numpy,您无需显式迭代。您可以使用索引范围,例如xx[1:]对应于使用i+1建立索引。 xx[:-1],除了最后一次。

def ball(numpts):
    rr = 5
    xx = np.linspace(-5,5,numpts)
    yy = np.sqrt(rr**2-xx**2)
    perimeterpoints = np.sqrt((xx[1:]-xx[:-1])**2+(yy[1:]-yy[:-1])**2)
    perimeter = np.sum(perimeterpoints)
    return perimeter