Python数组操作,pi * [n + 1] ^ 2 - pi * [n] ^ 2

时间:2016-08-17 23:44:23

标签: python arrays loops

我正在编写一个脚本,用于从多个气缸的外部气缸中减去内部气缸。

例如:x = pi*[n+1]**2 - pi*[n]**2

但是我不确定如何从例如1 - 4开始每次更改n,我希望能够更改n并让代码运行新值而不必更改所有内容。< / p>

x = pi*[1]**2 - pi*[0]**2    
x = pi*[2]**2 - pi*[1]**2
x = pi*[3]**2 - pi*[2]**2
x = pi*[4]**2 - pi*[3]**2

我试图让一个while循环工作,但我无法弄清楚如何引用n而没有具体说明我想引用的数组中的哪个数字。

非常感谢任何帮助。

rs = 0.2                                # Radius of first cylinder  
rc = 0.4                                # Radius of each cylinder (concrete) 
rg = 1                                  # Radius of each cylinder (soil)
BW = 3                                  # No. cylinders (concrete)
BG = 2                                  # No. cylinders (soil)
v1 = np.linspace(rs, rc, num=BW)        # Cylinders (concrete)
v2 = np.linspace(rc * 1.5, rg, num=BG)  # Cylinders (soil)

n = np.concatenate((v1, v2))            # Combined cylinders

for i in range(BW + BG):
    x = np.pi * (n[i + 1] ** 2) - np.pi * (n[i] ** 2)

4 个答案:

答案 0 :(得分:2)

试试这个:

for n in range(4): # 0 to 3
    x = pi*[n+1]**2 - pi*[n]**2 #[1] - [0], [2] - [1] and so on...
    # doSomething

如果[n]是名为num的数组的索引,请将[n]替换为 num[n]喜欢这样:

for n in range(4): # 0 to 3
    x = pi*(num[n+1]**2) - pi*(num[n]**2) #[1] - [0], [2] - [1] and so on...
    # doSomething

如果只是n,请将[n]替换为n,如下所示:

for n in range(4): # 0 to 3
    x = pi*((n+1)**2) - pi*(n**2) #[1] - [0], [2] - [1] and so on...
    # doSomething

答案 1 :(得分:2)

由于您的数字是一个numpy数组,因此在数组(或其片段)中使用广播操作要高效得多,而不是编写显式循环并对单个项目进行操作。这是使用numpy的主要原因!

尝试这样的事情:

# compute your `n` array as before

areas = pi * n**2   # this will be a new array with the area of each cylinder
area_differences = areas[1:] - areas[:-1]   # differences in area between adjacent cylinders

答案 2 :(得分:1)

这个怎么样:

for i, value in enumerate(n[:-1]):
    print(np.pi * (n[i + 1] ** 2) - np.pi * (value ** 2))

对我来说它打印:

0.157079632679
0.219911485751
0.628318530718
2.0106192983

也许你想要这个:

>>> values = [np.pi * (n[i + 1] ** 2) - np.pi * (value ** 2)
                          for i, value in enumerate(n[:-1])]
>>> values
[0.15707963267948971, 0.2199114857512855, 0.62831853071795885, 2.0106192982974673]

让我们解释一下:

  • 我们必须获取列表中的所有元素,但最后一个,因为n[i + 1]对最后一项失败,所以我们使用n[0:-1](如果它为0,我们可以省略切片的开头或如果它等于或大于len(n)),则结束。
  • enumerate(a_list)返回类似于表格中的对列表的内容 [(0, a_list[0]), (1, a_list[1]), ..., (n, a_list[n)]
  • for i, value in ...将每对解包为名为ivalue
  • 的变量
  • [something for something in a_list]会返回一个新列表。您可以进行计算,并过滤值。例如,如果你想要一个偶数整数的平方列表,如下所示:10 >>> [x * x for x in range(10) if x % 2 == 1]
    [1, 9, 25, 49, 81]

答案 3 :(得分:-1)

我认为这应该提供您正在寻找的结果:

rs = 0.2                                # Radius of first cylinder
rc = 0.4                                # Radius of each cylinder (concrete) 
rg = 1                                  # Radius of each cylinder (soil)
BW = 3                                  # No. cylinders (concrete)
BG = 2                                  # No. cylinders (soil)
v1 = np.linspace(rs, rc, num=BW)        # Cylinders (concrete)
v2 = np.linspace(rc * 1.5, rg, num=BG)  # Cylinders (soil)

n = np.concatenate((v1, v2))

results = []
for i, v in enumerate(n):
    if i+1 < len(n):
        results.append(pi * n[i+1] ** 2 - pi * v ** 2)
    else:
        break