【问题标题】:how do you convert a matrix to a array/list of strings?如何将矩阵转换为字符串数组/列表?
【发布时间】:2017-11-21 22:37:01
【问题描述】:

如何将矩阵转换为字符串数组/列表? 输入:

from numpy import array
M =   array([[1,1,2,5],
             [1,1,2,3],
             [1,2,0,4],
             [1,2,0,6],
             [1,2,0,8],
             [2,1,3,5],
             [2,2,9,6],
             [2,2,9,4]])

输出:

N =   array(["1,1,2,5",
             "1,1,2,3",
             "1,2,0,4",
             "1,2,0,6",
             "1,2,0,8",
             "2,1,3,5",
             "2,2,9,6",
             "2,2,9,4"])

我们已经尝试过这样的事情:

list1=[]
for i in range(len(M)):
    list1=list1.append(str(M[i,0]),str(M[i,1]),str(M[i,2]),str(M[i,3]))

【问题讨论】:

  • 你的数组是一个numpy数组?
  • N 应该是一个列表
  • 我的意思是你的数组 M 的类型是什么?它是array.array 还是 numpy 数组?还是?

标签: python arrays list for-loop matrix


【解决方案1】:

你可以试试这个:

l = [[1,1,2,5],
     [1,1,2,3],
     [1,2,0,4],
     [1,2,0,6],
     [1,2,0,8],
     [2,1,3,5],
     [2,2,9,6],
     [2,2,9,4]]

new = [','.join(map(str, i)) for i in l]

输出:

['1,1,2,5', '1,1,2,3', '1,2,0,4', '1,2,0,6', '1,2,0,8', '2,1,3,5', '2,2,9,6', '2,2,9,4']

【讨论】:

    【解决方案2】:

    假设你有原生的list 对象,它与np.array 没有什么不同:

    In [1]: M = [[1,1,2,5], [1,1,2,3], [1,2,0,4], [1,2,0,6], [1,2,0,8], [2,1,3,5], [
       ...: 2,2,9,6],[2,2,9,4]]
    
    In [2]: map(lambda x: ','.join(map(str, x)), M)
    Out[2]: <map at 0x1049fca58>
    
    In [3]: list(_)
    Out[3]:
    ['1,1,2,5',
     '1,1,2,3',
     '1,2,0,4',
     '1,2,0,6',
     '1,2,0,8',
     '2,1,3,5',
     '2,2,9,6',
     '2,2,9,4']
    

    它的作用是转换str 对象中每个元素的每个整数,并将其与',' 连接起来。

    【讨论】:

      【解决方案3】:

      假设您的列表是一个 numpy 数组,您可以使用 np.apply_along_axis()lambda function,如下例所示:

      M = array([[1, 1, 2, 5],
             [1, 1, 2, 3],
             [1, 2, 0, 4],
             [1, 2, 0, 6],
             [1, 2, 0, 8],
             [2, 1, 3, 5],
             [2, 2, 9, 6],
             [2, 2, 9, 4]])
      
      N = np.apply_along_axis(lambda x: ','.join(map(str, x)), 1, M)
      

      输出:

      >>> N
      array(['1,1,2,5', '1,1,2,3', '1,2,0,4', '1,2,0,6', '1,2,0,8', '2,1,3,5',
             '2,2,9,6', '2,2,9,4'], 
            dtype='<U7')
      

      【讨论】:

        【解决方案4】:

        简单地说:

        flat = [",".join([str(e) for e in row]) for row in M]
        

        【讨论】:

          【解决方案5】:

          在列表理解中执行此操作,使用 str.join 将转换后的整数连接到带逗号的字符串:

          from numpy import array
          
          M =   array([[1,1,2,5],
                       [1,1,2,3],
                       [1,2,0,4],
                       [1,2,0,6],
                       [1,2,0,8],
                       [2,1,3,5],
                       [2,2,9,6],
                       [2,2,9,4]])
          
          N = [",".join([str(x) for x in m]) for m in M]
          
          print(N)
          

          结果:

          ['1,1,2,5', '1,1,2,3', '1,2,0,4', '1,2,0,6', '1,2,0,8', '2,1,3,5', '2,2,9,6', '2,2,9,4']
          

          注意:要获得一个 numpy 数组,只需使用 array(N) 转换此 list

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 2019-09-15
            • 1970-01-01
            • 2019-08-16
            • 1970-01-01
            • 1970-01-01
            • 2019-11-24
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多