Convert string to numpy array

后端 未结 3 1203
死守一世寂寞
死守一世寂寞 2021-01-01 13:35

I have a string like mystr = \"100110\" (the real size is much bigger) I want to convert it to numpy array like mynumpy = [1, 0, 0, 1, 1, 0], mynumpy.shap

相关标签:
3条回答
  • 2021-01-01 14:13

    Adding to above answers, numpy now gives a deprecation warning when you use fromstring
    DeprecationWarning: The binary mode of fromstring is deprecated, as it behaves surprisingly on unicode inputs. Use frombuffer instead.
    A better option is to use the fromiter. It performs twice as fast. This is what I got in jupyter notebook -

    import numpy as np
    mystr = "100110"
    
    np.fromiter(mystr, dtype=int)
    >> array([1, 0, 0, 1, 1, 0])
    
    # Time comparison
    %timeit np.array(list(mystr), dtype=int)
    >> 3.5 µs ± 627 ns per loop (mean ± std. dev. of 7 runs, 100000 loops each)
    
    %timeit np.fromstring(mystr, np.int8) - 48
    >> 3.52 µs ± 508 ns per loop (mean ± std. dev. of 7 runs, 100000 loops each)
    
    %timeit np.fromiter(mystr, dtype=int)
    1.75 µs ± 133 ns per loop (mean ± std. dev. of 7 runs, 1000000 loops each)
    
    0 讨论(0)
  • 2021-01-01 14:35

    You could read them as ASCII characters then subtract 48 (the ASCII value of 0). This should be the fastest way for large strings.

    >>> np.fromstring("100110", np.int8) - 48
    array([1, 0, 0, 1, 1, 0], dtype=int8)
    

    Alternatively, you could convert the string to a list of integers first:

    >>> np.array(map(int, "100110"))
    array([1, 0, 0, 1, 1, 0])
    

    Edit: I did some quick timing and the first method is over 100x faster than converting it to a list first.

    0 讨论(0)
  • 2021-01-01 14:37

    list may help you do that.

    import numpy as np
    
    mystr = "100110"
    print np.array(list(mystr))
    # ['1' '0' '0' '1' '1' '0']
    

    If you want to get numbers instead of string:

    print np.array(list(mystr), dtype=int)
    # [1 0 0 1 1 0]
    
    0 讨论(0)
提交回复
热议问题