【发布时间】:2019-09-26 16:13:17
【问题描述】:
我正在尝试确定 numpy unicode 数组的最大元素长度。例如,如果我有:
# (dtypes added for clarity)
a = np.array(['a'], dtype='U5')
print(get_dtype_length(a))
我希望它打印5。
我可以这样做:
def get_dtype_length(a):
dtype = a.dtype
dtype_string = dtype.descr[0][1] # == '<U5'
length = int(dtype_string[2:])
return length
但这似乎是一种迂回的方式来推断必须在某处可用的东西。是否有我没有找到直接执行此操作的属性或 numpy 函数?
基于 cmets 的说明:
我专门寻找数组中任何元素的最大允许长度,而不是任何特定元素的长度(例如,不是len(a[0]) == 1。这背后的动机是,如果我尝试通过 @ 之类的方式更新 a 987654325@我不希望元素被截断为stri。
在 numpy 版本 1.19 中,我相信 np.can_cast(newVal.dtype, a.dtype, casting='safe') 对我的用例来说是一个有效的测试(因为在 1.19 中,安全也会测试强制转换是否会导致截断),但它仍然不能真正解决测试字符大小的问题.
【问题讨论】:
-
@MadPhysicist 但在这种情况下,项目大小不等于 4,这是 OP 正在寻找的答案
-
@myrtlecat。完全误读了这个问题。道歉。
-
那么,也许答案是
a.dtype.itemsize / 4? numpy 是否总是每个代码点使用 4 个字节来存储 unicode?span> -
@myrtlecat。可能只是
a.dtype.base.itemsize -
哇。这真的很不平凡。到目前为止,
a.dtype.itemsize / alen([0]),但这并不可靠。