如何将字符串转换为numpy数组?使用fromstring遇ValueError报错
解决numpy.fromstring转换字符串报错Zero-valued itemsize的问题
问题原因
你用np.fromstring(elements, dtype=str)报错是因为numpy的str dtype默认是可变长度字符串类型,而fromstring需要明确每个元素的固定字节大小(itemsize),可变长度的str无法提供这个值,所以触发ValueError: Zero-valued itemsize。
几种可行的解决方法
最直观的方法:先转成Python列表再转numpy数组
直接利用Python字符串可迭代的特性,把每个字符拆成列表元素,再转成numpy数组:import numpy as np elements = "abcxyz" Bingrid = np.array(list(elements)) # 输出:array(['a', 'b', 'c', 'x', 'y', 'z'], dtype='<U1')正确使用fromstring:指定固定长度的字符串dtype
给dtype参数传固定长度的字符串类型(比如'U1'表示长度为1的Unicode字符串),这样fromstring就能确定每个元素的大小:Bingrid = np.fromstring(elements, dtype='U1')字节流方式(适用于Python 3的字节处理场景)
先把字符串编码成字节流,用'S1'dtype解析,再转成字符串类型:Bingrid = np.fromstring(elements.encode(), dtype='S1').astype(str)
验证结果
以上三种方法都能得到你需要的array(["a", "b", "c", "x", "y", "z"])格式的numpy数组。
内容的提问来源于stack exchange,提问作者xyzf
相关产品推荐
相关产品推荐

