考虑一个字符串数组的 numpy 数组(至少是我最接近的做法):
ff = np.array([['a:bc','d:ef'],['g:hi','j:kl']])
print(ff.dtype)
<U4
但是这些不能与 numpy.char
一起使用方法显然..?
ffc = ff.astype('S5')
fff = np.char.split(ffc,':')[1]
Traceback (most recent call last):
File "<input>", line 3, in <module>
File "/usr/local/lib/python3.7/site-packages/numpy/core/defchararray.py", line 1447, in split
a, object_, 'split', [sep] + _clean_args(maxsplit))
TypeError: a bytes-like object is required, not 'numpy.str_'
类型<U4
有什么区别和.str_
以及如何通过 np.char.**
解析显示的字符串?
最佳答案
首先,np.char
函数适用于 chararrays
,应使用 np.char.array
构建或np.char.asarray
(参见docs)。
因此,您给定的代码将像这样工作:
ff = np.array([['a:bc','d:ef'],['g:hi','j:kl']])
ffc = np.char.asarray(ff)
fff = np.char.split(ffc, ':')[1]
print(fff)
输出:
[list(['g', 'hi']) list(['j', 'kl'])]
此转换是隐式执行的,因此实际上这也可以工作:
ff = np.array([['a:bc','d:ef'],['g:hi','j:kl']])
fff = np.char.split(ff, ':')[1]
为了完整起见,您的附属问题是关于 <U4
与 S5
:
一个numpy
dtype
与 U
表示unicode字符串,即recommended way of representing strings 。另一方面,S
表示一个以 null 结尾的字节数组。
我怀疑字符串方法是在 Python 对象上执行的,因此您需要一个类似 Python 字符串的类型(知道它自己的长度等),而不是一个“哑”C 类似字符串的字节数组。
关于python - 使用 numpy.char 函数需要哪些 numpy 结构作为输入?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55890268/