所以我希望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附近,我在上面的代码中修复了它。我得到了正确的答案
答案 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