You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Python矩阵字符串按行拼接:求类似np.sum的高效实现方法

实现类似np.sum的字符串行拼接方法

当然有办法!针对大规模矩阵的高效字符串拼接,我们可以用两种思路:一种是简洁易读的方法,另一种是纯向量化的高效方法(更适配超大规模矩阵)。

先看你的输入示例:

import numpy as np
arr = np.array([['', '', 'C'], ['A', '', 'C'], ['', 'B', '']], dtype='|S9')

方法一:简洁易读的行处理(适合中小规模,代码直观)

用np.apply_along_axis遍历每行,过滤空字符串后拼接,代码非常直观:

# 因为原数组是bytes类型(dtype='|S9'),需要先解码为字符串
result = np.apply_along_axis(
    lambda row: ' '.join([s.decode() for s in row if s != b'']),
    axis=1,
    arr=arr
).reshape(-1, 1)

如果你的数组是Unicode字符串类型(dtype='U'),去掉.decode()即可:

result = np.apply_along_axis(
    lambda row: ' '.join([s for s in row if s != '']),
    axis=1,
    arr=arr
).reshape(-1, 1)

执行后就能得到你要的输出:

array([['C'],
       ['A C'],
       ['B']], dtype='<U3')

方法二:纯向量化高效拼接(适配超大规模矩阵)

如果矩阵规模极大,apply_along_axis的循环会有性能瓶颈,这时候可以用numpy的字符操作模块np.char做纯向量化处理,避免显式循环:

from functools import reduce

# 1. 按行累积拼接元素,中间加空格
temp = reduce(lambda a, b: np.char.add(np.char.add(a, b' '), b), arr.T)
# 2. 去掉首尾多余的空格
temp = np.char.strip(temp)
# 3. 替换中间连续的多个空格为单个空格(处理空字符串带来的多余空格)
temp = np.char.replace(temp, b'  ', b' ')
# 4. 调整形状为列数组
result = temp.reshape(-1, 1)

同样,Unicode字符串版本把b' '换成' ',b' '换成' '即可。这种方法完全利用numpy的向量化运算,速度会比循环快很多,适合处理超大规模矩阵。

关键说明

  • 两种方法都能实现类似np.sum的按行聚合效果,区别在于性能和代码简洁性的权衡;
  • 注意区分numpy字符串数组的类型:|S是bytes类型,U是Unicode字符串类型,处理时要对应调整解码或字符串常量。

内容的提问来源于stack exchange,提问作者S.Perera

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.22 08:38:48