我正在编写一个脚本,用于从多个气缸的外部气缸中减去内部气缸。
例如: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)
答案 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 ...
将每对解包为名为i
和value
[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