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

Python数组操作,pi*[n+;1]^2-pi*[n]^2,python,arrays,loops,Python,Arrays,Loops,我正在写一个脚本,将多个圆柱体的内圆柱体与外圆柱体相减 例如:x=pi*[n+1]**2-pi*[n]**2 但是,我不知道如何让n在示例1-4中每次更改,我希望能够更改n并让代码在不必更改所有内容的情况下运行新值 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循环工作,但如果不明确说明要引用数组中的哪个数字

我正在写一个脚本,将多个圆柱体的内圆柱体与外圆柱体相减

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

但是,我不知道如何让n在示例1-4中每次更改,我希望能够更改n并让代码在不必更改所有内容的情况下运行新值

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)
试试这个:

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
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
,则将
[n]
替换为
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
for n in range(4): # 0 to 3
    x = pi*((n+1)**2) - pi*(n**2) #[1] - [0], [2] - [1] and so on...
    # doSomething
试试这个:

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
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
,则将
[n]
替换为
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
for n in range(4): # 0 to 3
    x = pi*((n+1)**2) - pi*(n**2) #[1] - [0], [2] - [1] and so on...
    # doSomething

我认为这应该提供您想要的结果:

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
rs=0.2#第一个圆柱体的半径
rc=0.4#每个圆柱体的半径(混凝土)
rg=1#每个圆柱体的半径(土壤)
BW=3个圆柱体(混凝土)
BG=2个气缸(土壤)
v1=np.linspace(rs,rc,num=BW)#圆柱体(混凝土)
v2=np.linspace(rc*1.5,rg,num=BG)#圆柱体(土壤)
n=np.连接((v1,v2))
结果=[]
对于枚举(n)中的i,v:
如果i+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
rs=0.2#第一个圆柱体的半径
rc=0.4#每个圆柱体的半径(混凝土)
rg=1#每个圆柱体的半径(土壤)
BW=3个圆柱体(混凝土)
BG=2个气缸(土壤)
v1=np.linspace(rs,rc,num=BW)#圆柱体(混凝土)
v2=np.linspace(rc*1.5,rg,num=BG)#圆柱体(土壤)
n=np.连接((v1,v2))
结果=[]
对于枚举(n)中的i,v:
如果i+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,列表[0]),(1,列表[1]),…,(n,列表[n)]
  • 对于i,value in…
    将每对解压为名为
    i
    value
  • [列表中某物的某物]
    返回一个新列表。您可以进行计算并过滤值。例如,如果您想要一个偶数整数平方的列表,请参见下面的10:
    >>[x*x表示范围(10)内的x,如果x%2==1]

    [1,9,25,49,81]
    • 这个怎么样:

      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,列表[0]),(1,列表[1]),…,(n,列表[n)]
      • 对于i,value in…
        将每对解压为名为
        i
        value
      • [列表中某物的某物]
        返回一个新列表。您可以进行计算并过滤值。例如,如果您想要一个偶数整数平方的列表,请参见下面的10:
        >>[x*x表示范围(10)内的x,如果x%2==1]

        [1,9,25,49,81]

      由于您的数字位于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
      

      由于您的数字位于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
      

      为什么不能具体说明要引用哪个数组号?提供更多的上下文代码会很有用。为什么不能具体说明要引用哪个数组号?提供更多的上下文代码会很有用。
      pi*[n]**2
      没有任何意义,因为
      [n]
      是一个单元素列表。我认为提问者的意思是将其作为一个索引,所以将
      pi*放入一些\u序列[n]**2
      取而代之。感谢您的及时响应,不管它们是浮点数,有没有一种简单的方法可以使范围与浮点数一起工作?@ScottLines我不明白您所说的
      使范围与浮点数一起工作是什么意思?
      我得到一个错误,即“float”对象不能解释为浮点数integer@ScottLines我无法重现那个问题m、 请您输入完整的代码好吗?
      pi*[n]**2
      没有任何意义,因为
      [n]
      是一个单元素列表。我想提问者的意思是