【问题标题】:Python: How to convert multiple list that have multiple digits into array?Python:如何将具有多个数字的多个列表转换为数组?
【发布时间】:2016-01-08 07:55:34
【问题描述】:

我有一个文本文件,其中列出了 4 x 3 二进制值:

1 0 1
0 0 1
1 1 0
0 0 1

当我在python中读取这个文件时,它是这样的形式:

import numpy as np
with open("test.txt")as g:
    p=g.read().splitlines()
    q=[];
    for m in p:
        q.append(int(m));
    p=q;

Python 窗口:

>>> p
['1 0 1', '0 0 1', '1 1 0', '0 0 1']

如何转换成数组:

array([[ 1.0,  0.0,  1.0],
   [ 0.0,  0.0,  1.0],
   [ 1.0,  1.0,  0.0],
   [ 0.0,  0.0,  1.0]])

【问题讨论】:

标签: python arrays list numpy


【解决方案1】:

到目前为止,最简单的解决方案是跳过读取您自己的文件并将行转换为列表的所有中间步骤,只需使用numpy.loadtxt()。默认情况下,这些值将是浮点类型,因此您无需再做任何事情。

import numpy as np

dat = np.loadtxt('test.txt')

【讨论】:

    【解决方案2】:

    您可以遍历p 中的每个line,将字符串拆分为单独的数字,最后将每个子字符串转换为float

    import numpy as np
    
    p = ['1 0 1', '0 0 1', '1 1 0', '0 0 1']
    print np.array([map(float, line.split()) for line in p])
    

    输出:

    [[ 1.  0.  1.]
     [ 0.  0.  1.]
     [ 1.  1.  0.]
     [ 0.  0.  1.]]
    

    【讨论】:

      【解决方案3】:

      假设您保证输入足够理智,您可以拆分字符串并将片段转换为int

      def str2ints(l):
          return [int(frag) for frag in l.split()]
      

      此函数取一行并将其拆分为多个部分,fx "1 0 1" 拆分为 ["1", "0", "1"] 然后我使用列表理解并将片段转换为 int。

      你在整个p 上使用了更多的列表理解:

      [str2ints(l) for l in p]
      

      【讨论】:

        猜你喜欢
        • 2016-03-18
        • 2021-01-14
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2020-03-24
        • 1970-01-01
        • 2015-12-30
        相关资源
        最近更新 更多