减少Numpy中沿轴的字符串的多维数组

时间:2018-07-05 11:55:52

标签: python arrays numpy

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

2 个答案:

答案 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)