如何从充满字符串的numpy数组(形状(n,m))中获取所有值的第一个字符

How to get the first character of all values out of numpy array (shaped (n, m)) filled with strings

所以我有一个形状像 (n, m) 的大数组,里面装满了字符串。一个小例子是:

string_array = np.array([
    ['hello', 'world'],
    ['greetings', 'all'],
    ['merry', 'christmas']
])

我想要每个字符串的所有第一个字符,但出于某种原因我遇到了困难。我的第一个猜测是使用:

>>> string_array[:, :][0]

这没有用,因为我只是从矩阵中取出第一行。我想要你使用

时得到的结果
>>> string_array[0, 0][0]
>>> 'h'

但是现在对于数组中的每个元素?我当然喜欢没有循环的解决方案。为清楚起见,我想要以下内容:

array([
    ['h', 'w'],
    ['g', 'a'],
    ['m', 'c']
])

你可以使用 np.vectorize

>>> np.vectorize(lambda s: s[0])(string_array)
array([['h', 'w'],
       ['g', 'a'],
       ['m', 'c']], dtype='<U1')

尽管请注意 np.vectorize 实际上并没有“矢量化”它在循环中对数组应用一个函数。

编辑:看起来这个问题 并且对其他方法有很好的性能分析。