【问题标题】:Adding two arrays using a for loop使用 for 循环添加两个数组
【发布时间】:2020-01-25 01:30:14
【问题描述】:
         from numpy import *
         arr1 = array([5,10,15,20,30])
         arr2 = array([55,16,1,280,60])
         arr3 = ([])
         k =0
         for num1 in arr1:
                num3 = num1 + arr2[k]
                arr3.append(num3)
                k +=1
         print(arr3)

如果 arr1 或 arr2 有更多索引,我该如何解决。

【问题讨论】:

  • 您的预期结果是什么?
  • arr3 = arr1 + arr2 用于相同形状的 numpy 数组。如果形状不同,则问题定义不明确。

标签: python arrays python-3.x numpy for-loop


【解决方案1】:

from package import * 通常是个坏主意,因为您可以覆盖命名空间中的其他包。 Numpy 有一个内置的解决方案可以将两个数组相加:

import numpy as np
arr1 = np.array([5,10,15,20,30])
arr2 = np.array([55,16,1,280,60])
arr1+arr2

array([ 60, 26, 16, 300, 90]) # 435 ns ± 5.89 ns per loop (mean ± std. dev. of 7 runs, 1000000 loops each)

不过,您需要两个数组具有相同的长度。

如果你想使用一些标准的 Python 函数(而不是 for 循环),你可以使用 mapzip 来处理长度不同的数组:

list(map(sum, zip(arr1,arr2)))
[60, 26, 16, 300, 90] # 4.45 µs ± 60.2 ns per loop (mean ± std. dev. of 7 runs, 100000 loops each)

如果你想使用 for 循环,你可以这样做:

new_list = []
for i in range(min(len(arr1), len(arr2))):
    new_list.append(arr1[i]+arr2[i])
new_list

[60, 26, 16, 300, 90] # 2.71 µs ± 307 ns per loop (mean ± std. dev. of 7 runs, 100000 loops each) 所有这些都假设您想在到达最短列表的末尾时停下来。

【讨论】:

    【解决方案2】:

    如果数组长度不等,您首先需要对齐长度相同的部分,执行您的操作(例如加法),然后连接较长数组的其余部分(可能应用另一个操作,但不在这种情况下)。

    import numpy as np
    
    arr1 = np.array([5,10,15,20,30])
    arr2 = np.array([55,16,1,280,60, 70])  # Longer than arr1.
    
    min_len = min(len(arr1), len(arr2))
    longer_array = arr1 if len(arr1) > len(arr2) else arr2
    partial_result = arr1[:min_len] + arr2[:min_len]
    >>> np.concatenate((partial_result, longer_array[min_len:]))
    array([ 60,  26,  16, 300,  90,  70])
    

    【讨论】:

      【解决方案3】:

      只需将最大的数组复制到新数组中,并将新数组的每个索引替换为两个数组各自的索引相加即可。这样可以避免索引超出范围和将较大数组的数组复制到新数组中。

      from numpy import *
      
      arr1 = array([1, 2, 3, 4, 5 ])
      arr2 = array([6, 7, 8, 9, 10, 11, 12])
      arr3 = ([])
      
      if len(arr1) == len(arr2):  # Finding minimum length array
          minLength = len(arr1)
          pass
      elif len(arr1) > len(arr2):
          minLength = len(arr2)
          arr3 = arr1.copy()     # Copy max array into new array
      else:
          minLength = len(arr1)
          arr3 = arr2.copy()     # Copy max array into new array
      
      for i in range(minLength):
          arr3[i] = arr1[i] + arr2[i]  # adding array and replacing in new array
      
      print(arr3)
      

      【讨论】:

        【解决方案4】:
        from numpy import *
        
        arr1 = array([2, 6, 8, 9, 1])
        arr2 = array([1, 2, 3, 4, 5])
        list1 = [ ] 
        e = 0
        for num1 in arr1:
              list1.append(arr2[e] + num1)
              e+=1
        
        print(array(list1))
        

        【讨论】:

        • 这种方法与现有方法有何不同?为什么你更喜欢这种方法?请编辑您的问题以包含此信息,以帮助未来的读者对主题进行分类。
        【解决方案5】:

        为此,我们需要先导入 numpy 包,仅当两个数组长度相同时才使用它。

        from numpy import*
        
        arr1 = array([1,2,3,4,5])
        arr2 = array([2,3,4,5,6])
        for i in range(len(arr1)):
            arr3 = arr1[i] + arr2[i]
            print(arr3)
        

        【讨论】:

        • 这可能被认为不如@hpaulj 的答案那么pythonic
        猜你喜欢
        • 1970-01-01
        • 2017-12-28
        • 2017-07-14
        • 2018-01-27
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2020-10-22
        相关资源
        最近更新 更多