gpt4 book ai didi

python - 使用字符串理解 NumPy dtype "c"

转载 作者:行者123 更新时间:2023-11-28 18:06:59 25 4
gpt4 key购买 nike

目标:转换 strnp.ndarraybytes尺寸 1:

import numpy as np
np.array("abc", dtype=[whatever])

没有数据类型的实际结果: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')

我通过反复试验找到了这个,认为 'c'可能意味着“字符”

我不明白的地方:为什么是dtype='c'工作的方式是什么?根据arrays.dtypes reference 'c'是“复 float ”的缩写,而 '|S1'是长度为 1 的“零终止字节(不推荐)”。

也可以直接使用'|S1'作为dtype忽略除第一个字符之外的每个字符,这不是我所期望的,但我想它只需要 "abc"作为一个论点和b'a'如果仅将一个字节指定为 dtype 会出现什么:

np.array("abc", dtype='|S1')
# array(b'a', dtype='|S1')

问题:

  1. 为什么是dtype='c'按照现在的方式工作?
  2. (如果 dtype='c' 只是“偶然”起作用,那么“正确的方法”是什么?)

附言:是的,有一个 np.chararray ,但根据链接的文档:

The chararray class exists for backwards compatibility with Numarray, it is not recommended for new development. Starting from numpy 1.4, if one needs arrays of strings, it is recommended to use arrays of dtype object_, string_ or unicode_, and use the free functions in the numpy.char module for fast vectorized string operations.

不过推荐dtypes object_ , string_unicode_不要将字符串拆分为字符,而是返回 ndarray有一个元素。

最佳答案

这对我来说似乎是一个错误。请注意,如果您未指定字符代码“c”后的字节数,则 dtype 实际上是“S1”,而不是复数 float 。查看数据类型的这些属性:

>>> 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')

所以人们会期望 np.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')

关于python - 使用字符串理解 NumPy dtype "c",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52967253/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com