为什么NumPy中的完整函数不能采用dtype=str

busg9geu  于 2023-08-05  发布在  其他
关注(0)|答案(4)|浏览(117)

为什么我只看到一个字母而不是“cube”当我没有输入dtype=“str”时,它工作了。我的问题是为什么?
代码:

np.full((3,3,3),"cube",dtype=str)

字符串
结果:

array([[['c', 'c', 'c'],
        ['c', 'c', 'c'],
        ['c', 'c', 'c']],

       [['c', 'c', 'c'],
        ['c', 'c', 'c'],
        ['c', 'c', 'c']],

       [['c', 'c', 'c'],
        ['c', 'c', 'c'],
        ['c', 'c', 'c']]], dtype='<U1')

z9gpfhce

z9gpfhce1#

np.full((3,3,3),"cube",dtype=str)

字符串

相当于

np.full((3,3,3),"cube",dtype='U1')


它将只接受字符串的第一个元素。
您可以通过以下方式获得完整结果:

np.full((3,3,3),"cube",dtype=object)


或者是

np.full((3,3,3),"cube",dtype='U4')  # U4 as you have 4 letters in cube, you can do any U>4 like U5, U6, etc.


或者只删除dtype=str。删除后,它将占用字符串的完整长度。

np.full((3,3,3),"cube")

v440hwme

v440hwme2#

full的部分源代码是(参见文档中的[source]链接):

if dtype is None:
        fill_value = asarray(fill_value)
        dtype = fill_value.dtype
    a = empty(shape, dtype, order)
    multiarray.copyto(a, fill_value, casting='unsafe')

字符串
np.asarray可以推导出'cube'的填充值的'U4' dtype。
但是np.empty(shape, 'str')产生'U1' dtype。它没有关于fill_value的信息。
这就是为什么没有dtype,它会推断出它需要一个足够大的字符串来容纳4个字符,但是没有它,它只分配了1个字符的空间。

toe95027

toe950273#

应该可以

import numpy as np
np.full((3,3,3),"cube",dtype='U4')

字符串

tkclm6bt

tkclm6bt4#

Dude,just remove(dtype:它是可选)。
代码:

np.full( (3,3,3), "cube" )

字符串
语法:

numpy.full(shape, fill_value, dtype=None, order='C')

相关问题