Numpy是否实现某些功能来减少字符串的多维数组?我知道它为多个数组的字符串连接提供了一些功能,但是我还没有发现有关字符串减少的任何信息。
假设我有一个二维数组的字符串:
np.array([['a', 'b', 'c'],['e','f','g']])
我想将其转换为:
np.array(['a b c','e f g'])
有比使用for循环更好的方法,例如:
old_strings = np.array([['a', 'b', 'c'],['e','f','g']])
new_strings = np.array([])
for s in old_strings:
new_strings = np.append(new_strings, (' '.join(s)))
答案 0 :(得分:2)
这是一种可以强制NumPy API进行此操作的方法,尽管它与自己进行操作可能并没有太大不同:
import numpy as np
# Make one-dimensional array of lists of strings
a = np.array([None, None])
a[0] = ['a', 'b', 'c']
a[1] = ['e', 'f', 'g']
# Join
print(np.char.join(' ', a))
>>> ['a b c' 'e f g']
答案 1 :(得分:2)
使用常规字符串操作比使用np.char.join
更好。
>>> arr = np.array([['a', 'b', 'c'],['e','f','g']])
>>> np.array([' '.join(i) for i in arr])
array(['a b c', 'e f g'], dtype='<U5')
比np.char.join
%timeit np.array([' '.join(i) for i in arr])
8.69 µs ± 30 ns per loop (mean ± std. dev. of 7 runs, 100000 loops each)
%timeit np.char.join(' ', arr)
14.6 µs ± 86.1 ns per loop (mean ± std. dev. of 7 runs, 100000 loops each)
在更大的数组上:
arr = np.repeat(arr, 10000).reshape(-1, 3)
%timeit np.array([' '.join(i) for i in arr])
54.2 ms ± 596 µs per loop (mean ± std. dev. of 7 runs, 10 loops each)
%timeit np.char.join(' ', arr)
72.3 ms ± 2.36 ms per loop (mean ± std. dev. of 7 runs, 10 loops each)