【问题标题】:How to convert a list of strings into a numeric numpy array?如何将字符串列表转换为数字 numpy 数组?
【发布时间】:2017-03-08 04:42:03
【问题描述】:

我希望能够计算A 的平均值、最小值和最大值:

 import numpy as np

 A = ['33.33', '33.33', '33.33', '33.37']

 NA = np.asarray(A)

 AVG = np.mean(NA, axis=0)

 print AVG

这不起作用,除非转换为:

A = [33.33, 33.33, 33.33, 33.37]

是否可以自动执行此转换?

【问题讨论】:

    标签: python arrays numpy average


    【解决方案1】:

    你想要astype

    NA = NA.astype(float)
    

    【讨论】:

      【解决方案2】:

      你有一个字符串列表

      你创建了一个字符串数组

      你需要一个浮点数组来进行后期处理;所以当你创建你的数组时指定数据类型,它会在创建时将字符串转换为浮点数

      import numpy as np
      
      #list of strings
      A = ['33.33', '33.33', '33.33', '33.37']
      print A
      
      #numpy of strings
      arr = np.array(A)
      print arr
      
      #numpy of float32's
      arr = np.array(A, dtype=np.float32)
      print arr
      
      #post process
      print np.mean(arr), np.max(arr), np.min(arr)
      
      >>>
      ['33.33', '33.33', '33.33', '33.37']
      ['33.33' '33.33' '33.33' '33.37']
      [ 33.33000183  33.33000183  33.33000183  33.36999893]
      33.34 33.37 33.33
      

      https://docs.scipy.org/doc/numpy/user/basics.types.html

      【讨论】:

        【解决方案3】:
        import numpy as np
        A = ['33.33', '33.33', '33.33', '33.37']
        # convert to float
        arr = np.array(map(float, A)) 
        # calc values
        print np.mean(arr), np.max(arr), np.min(arr)
        

        输出: 33.34 33.37 33.33

        【讨论】:

        • 请注意:这在 Python 3 中不起作用,因为 map 不返回列表。
        【解决方案4】:

        A = [float(v) for v in ['33.33', '33.33', '33.33', '33.37']]

        A = np.array(['33.33', '33.33', '33.33', '33.37'], dtype=float)

        【讨论】:

          【解决方案5】:

          要将字符串转换为浮点数,最简单的方法是列表推导:

          A = ['33.33', '33.33', '33.33', '33.37']
          floats = [float(e) for e in A]
          

          现在可以转换为数组了:

          array_A = np.array(floats)
          

          其余的你可能都知道:

          mean, min, max = np.mean(array_A), np.min(array_A), np.max(array_A)
          

          【讨论】:

            【解决方案6】:

            这里是:

            import numpy as np
            
            A = ["33.33", "33.33", "33.33", "33.37"]
            for i in range(0,len(A)):
                n = A[i]
                n=float(n)
                A[i] = n
            
            NA = np.asarray(A)
            
            AVG = np.mean(NA, axis=0)
            maxx = max(A)
            minn = min(A)
            
            print (AVG)
            print (maxx)
            print (minn)
            

            希望这会有所帮助!!! 基本上,您没有 min 和 max 函数,并且列表中的字符串必须是整数

            【讨论】:

            • 如果列表无法更改而您不得不将其保留为字符串怎么办?尽量不要做出假设。
            • 这不起作用,因为您没有转换值,而是没有将它们放入列表中!
            猜你喜欢
            • 2019-03-24
            • 2013-05-05
            • 2016-03-10
            • 2019-10-31
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2021-02-03
            • 2021-04-26
            相关资源
            最近更新 更多