【问题标题】:Find the number closest to zero in an array在数组中找到最接近零的数字
【发布时间】:2020-07-08 10:14:31
【问题描述】:

我有一堆包含正数和负数的 numpy 数组,我想在每个数组中找到最接近零的数字不是最小的数字。我还想保留数字的符号。示例如下:

array1 = np.array([5, 3.2, -1.2, -0.2, 7])
array2 = np.array([19, -20, -4.7, 6, 9, 42])
array3 = np.array([4, 0.3, -9, 8, 6, 14])

理想的输出是给我最接近零的数字,所以对于每个数组,它分别是:

"Closest to zero for array 1:" -0.2

"Closest to zero for array 2:" -4.7

"Closest to zero for array 3:" 0.3

有什么办法吗?

【问题讨论】:

标签: python arrays numpy


【解决方案1】:

没有numpy的一种方式;使用minabs

for arr in [array1, array2, array3]:
    print(arr, min(arr, key=abs))

输出:

[ 5.   3.2 -1.2 -0.2  7. ] -0.2
[ 19.  -20.   -4.7   6.    9.   42. ] -4.7
[ 4.   0.3 -9.   8.   6.  14. ] 0.3

【讨论】:

    【解决方案2】:

    argminabs 的组合:

    >>> for array in (array1, array2, array3):
    ...     print(array, array[np.argmin(np.abs(array))])
    
    [ 5.   3.2 -1.2 -0.2  7. ] -0.2
    [ 19.  -20.   -4.7   6.    9.   42. ] -4.7
    [ 4.   0.3 -9.   8.   6.  14. ] 0.3
    

    【讨论】:

      【解决方案3】:
      min1=abs(array1[0])
      
      for i in array1:
          if(abs(i)<abs(min1)):
              min1=i
      
      print("Closest to zero for array 1: "+ str(min1))
      

      【讨论】:

        【解决方案4】:

        如果你想得到最小值

        np.minimum([2, 3, 4], [1, 5, 2])

        //

        np.minimum(np.eye(2), [0.5, 2]) # 广播

        参考:https://numpy.org/doc/stable/reference/generated/numpy.minimum.html

        【讨论】:

          【解决方案5】:
          myList = [4, 1, 88, 44, 3,-1,-7,-19,-0.5,-0.2]
          
          def compute_closest_to_zero(myList):
              positive = []
              negative = []
              if len(myList) == 0:
                  print('0')
              else:
                  for i in myList:
                      if i >= 0:
                          positive.append(i)
                          #print(positive)
                      else:
                          negative.append(i)
                          #print(negative)
                          #print(min(positive))
          
                          
              if min(positive) + max(negative) < 0:
                  print(min(positive))
              else:
                  print(max(negative))
              return
          
          Blockquote
          
          compute_closest_to_zero(myList)
          

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2015-04-18
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多