切片并找到音量

时间:2014-07-28 14:21:22

标签: python numpy iteration volume slice

我有四列,即 x,y,z,zcosmo 。 zcosmo的范围是 0.0<zcosmo<0.5

对于每个x,y,z,都有一个zcosmo。

当绘制 x,y,z 时,这就是它们的外观。 enter image description here

我想找到这个数字的体积。如果我将其切成50个部分(按照zcosmo顺序升序),以便每个部分类似于圆柱,我可以将它们加起来以获得最终音量。

切片圆柱体的体积为pi*r^2*h,在我的情况下 r = z/2 & h = x

例如切片就像, x,z for 0.0<zcosmo<0.01 找到此卷 V1 。然后 x,z for 0.01<zcosmo<0.02 找到此卷 V2 ,依此类推,直到zcosmo = 0.5

我知道要手动执行此操作(当然这非常耗时):

r1 = z[np.logical_and(zcosmo>0.0,zcosmo<0.01)] / 2 #gives me z within the range 0.0<zcosmo<0.01
h1 = x[np.logical_and(zcosmo>0.0,zcosmo<0.01)] #gives me x within the range 0.0<zcosmo<0.01

V1 = math.pi*(r1**2)*(h1)

此处r1和h1应为r1 = ( min(z) + max(z) ) / 2.0h1 = max(x) - min(x),即最大值和最小值,以便每个切片获得一个体积

我应该如何创建一个计算zcosmo切片范围内50个体积切片的代码?

1 个答案:

答案 0 :(得分:1)

使用for循环:

volumes = list()
for index in range(0, 50):
    r = z[np.logical_and(zcosmo>index * 0.01, zcosmo<index * 0.01 + 0.01)] / 2
    h = x[np.logical_and(zcosmo>index * 0.01, zcosmo<index * 0.01 + 0.01)]

    volumes.append(math.pi*(r**2)*(h))

最后,卷将是一个包含50个柱面的卷的列表。

您可以使用volume = sum(volumes)来获取形状的最终体积。