代码之家  ›  专栏  ›  技术社区  ›  Marco Garcia Baturan

矩阵数到矩阵ASCII的转换?

  •  0
  • Marco Garcia Baturan  · 技术社区  · 8 年前

    我编写了一个基本脚本,用python3生成一个33到255之间的整数方阵。我很容易达到这一点,但接下来的问题是: 我尝试将这些数字转换为ASCII符号,并将其转换为方阵。但在互联网上搜索或叠加流之后,我没有找到解决方案。这是我的代码:

    #!usr/bin/env/python3.6
    # imports
    import numpy as np
    import random
    # Generated random matrix of 25 spaces, 
    # where placed ramdom number between 0 to 255,
    # and store in a variable.
    matrix = np.random.randint(33,255, size=(5, 5))
    
    # This shows the matrix of integer numbers.
    print(matrix) # Good!!!
    # This translate  matrix of number to ASCII table symbols:
    for matrix in store:
        print(chr(matrix)) # BANG! Error, my honey.
    
    2 回复  |  直到 8 年前
        1
  •  1
  •   IR-x86    8 年前

    是什么 store 在代码中。修复此错误后,它可以正常工作

    #!usr/bin/env/python3.6
    # imports
    import numpy as np
    import random
    # Generated random matrix of 25 spaces, 
    # where placed ramdom number between 0 to 255,
    # and store in a variable.
    matrix = np.random.randint(33,255, size=(5, 5))
    
    # This shows the matrix of integer numbers.
    print(matrix) # Good!!!
    # This translate  matrix of number to ASCII table symbols:
    for col in range(5):
        for row in range(5):
            print(chr(matrix[row][col]), end=' ')
        print('\n') # Solved, my honey.
    

    输出为-

    [[ 86 159  40 221 211]
     [166 224 213 252 160]
     [155 160 111 109 164]
     [ 98 190  34 250  40]
     [115 228  59 139 221]]
    
    V ¦  b s 
     à   ¾ ä 
    ( Õ o " ; 
    Ý ü m ú  
    Ó   ¤ ( Ý 
    
        2
  •  1
  •   Paul Panzer    8 年前

    dtype = np.uint16 if np.dtype('U1').itemsize==2 else np.uint32
    matrix.astype(dtype).view('U1')
    array([['Ö', '´', 'O', 'i', '\x98'],
           ['à', 'ü', 'S', 'm', 'æ'],
           ['ý', 'm', '#', 'ö', 'u'],
           ['±', 'l', '\x82', 'O', 'È'],
           ['h', '&', '\x82', 'ª', '\xad']],
          dtype='<U1')
    

    工作类型。但不是百分之百确定它是ASCII码。但它的作用与 chr :

    import pprint
    >>> pprint.pprint([[chr(number) for number in row] for row in matrix])
    [['Ö', '´', 'O', 'i', '\x98'],
     ['à', 'ü', 'S', 'm', 'æ'],
     ['ý', 'm', '#', 'ö', 'u'],
     ['±', 'l', '\x82', 'O', 'È'],
     ['h', '&', '\x82', 'ª', '\xad']]
    

    我们要做的是 uint16 uint32 因为 U 数据类型似乎每个字符有2或4个字节。然后,我们观看 U1 将数字重新解释为字符,仅此而已。