Nik*_*sch 5 python arrays numpy char
目标:转换str为np.ndarray大小bytes1:
import numpy as np
np.array("abc", dtype=[whatever])
Run Code Online (Sandbox Code Playgroud)
没有数据类型的实际结果:array('abc', dtype='<U3')
期望的结果:array([b'a', b'b', b'c'], dtype=[whatever]这让我可以使用切片来获得
我找到但不明白的解决方法:
np.array("abc", dtype='c')
# array([b'a', b'b', b'c'], dtype='|S1')
Run Code Online (Sandbox Code Playgroud)
我通过反复试验发现了这个,认为这'c'可能意味着“char”
我不明白的是:
为什么要dtype='c'这样工作?根据arrays.dtypes 参考,它'c'是“复数浮点”的缩写,而'|S1'是长度为 1 的“零终止字节(不推荐)”。
还直接使用“|S1”作为dtype忽略除第一个字符之外的每个字符,这不是我所期望的,但我想它只是将作为"abc"一个参数,并且b'a'如果仅将单个字节指定为dtype:
np.array("abc", dtype='|S1')
# array(b'a', dtype='|S1')
Run Code Online (Sandbox Code Playgroud)
问题):
dtype='c'这样工作?dtype='c'只是“偶然”工作,那么“正确的方法”是什么?)PS: 是的,有一个np.chararray,但根据链接的文档:
chararray 类的存在是为了向后兼容 Numarray,不建议用于新开发。从 numpy 1.4 开始,如果需要字符串数组,建议使用 dtype object_、string_ 或 unicode_ 的数组,并使用 numpy.char 模块中的 free 函数进行快速向量化字符串操作。
但是建议使用 dtypes object_,string_并且unicode_不要将字符串拆分为字符,而是返回ndarray带有一个元素的 a 。
对我来说这似乎是一个错误。请注意,如果您没有指定字符代码“c”之后的字节数,则数据类型实际上是“S1”,而不是复杂的浮点数。查看数据类型的这些属性:
>>> dt_S1 = np.dtype('S1')
>>> dt_S1, dt_S1.kind, dt_S1.name, dt_S1.char
(dtype('S1'), 'S', 'bytes8', 'S')
>>> dt_c = np.dtype('c')
>>> dt_c, dt_c.kind, dt_c.name, dt_c.char))
(dtype('S1'), 'S', 'bytes8', 'c')
>>> dt_c8 = np.dtype('c8')
>>> dt_c8, dt_c8.kind, dt_c8.name, dt_c8.char
(dtype('complex64'), 'c', 'complex64', 'F')
Run Code Online (Sandbox Code Playgroud)
因此,人们会期望 fornp.array('abc', dtype='c')和np.array('abc', dtype='S1')返回相同的结果array(b'a', dtype='S1'),或者前者会给出错误np.array('abc', dtype='c8')。
恕我直言,完成任务的正确方法是:
np.array(list('abc'), dtype='S1')
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
2336 次 |
| 最近记录: |