How can a string representation of a NumPy array be converted to a NumPy array?

后端 未结 2 1190
暗喜
暗喜 2021-01-23 00:46

The function numpy.array_repr can be used to create a string representation of a NumPy array. How can a string representation of a NumPy array be converted to a Num

2条回答
  •  说谎
    说谎 (楼主)
    2021-01-23 00:55

    I often debug with print statements. To read numpy output from the console back into a python environment, I use the following utility based on np.matrix.

    def string_to_numpy(text, dtype=None):
        """
        Convert text into 1D or 2D arrays using np.matrix().
        The result is returned as an np.ndarray.
        """
        import re
        text = text.strip()
        # Using a regexp, decide whether the array is flat or not.
        # The following matches either: "[1 2 3]" or "1 2 3"
        is_flat = bool(re.match(r"^(\[[^\[].+[^\]]\]|[^\[].+[^\]])$",
                                text, flags=re.S))
        # Replace newline characters with semicolons.
        text = text.replace("]\n", "];")
        # Prepare the result.
        result = np.asarray(np.matrix(text, dtype=dtype))
        return result.flatten() if is_flat else result
    

    Here's the workflow that I often apply for debugging:

    1) Somewhere in my code...

    import numpy as np
    x = np.random.random((3,5)).round(decimals=2)
    print(x)
    
    1. This prints the content of the array onto the console, for example:
        [[0.24 0.68 0.57 0.37 0.83]
         [0.76 0.5  0.46 0.49 0.95]
         [0.39 0.37 0.48 0.69 0.25]]
    
    1. To further examine the output, I select the text and paste it in a ipython session as follows:
        In [9]: s2n = string_to_numpy # Short alias
    
        In [10]: x = s2n("""[[0.24 0.68 0.57 0.37 0.83]
                             [0.76 0.5  0.46 0.49 0.95]
                             [0.39 0.37 0.48 0.69 0.25]]""")
        In [11]: x.shape
        Out[11]: (3, 5)
    
        In [12]: x.mean(axis=1)
        Out[12]: array([0.538, 0.632, 0.436])
        
        ...
    

提交回复
热议问题