【发布时间】:2021-09-28 14:42:23
【问题描述】:
假设我有一个任意维度的字符串ndarray。例如:[["abc", "def"], ["ghi", "jkl"]]。现在,我想将每个字符串拆分为单独的字符,以便基本上添加第二维中的轴:[[['a', 'd'], ['b', 'e'], ['c', 'f']], [['g', 'j'], ['h', 'k'], ['i', 'l']]]。或者说得更好,它的行为应该类似于 MATLAB 将字符串数组转换为 char 数组:
A =
2×2 string array
"abc" "def"
"ghi" "jkl"
应该变成:
2×3×2 char array
ans(:,:,1) =
'abc'
'ghi'
ans(:,:,2) =
'def'
'jkl'
我尝试了np.frompyfunc、np.apply_over_axis 和np.apply_from_axis 之类的功能,但到目前为止对我没有任何帮助。有什么巧妙的技巧可以做到这一点?
反过来其实很简单:
def row_to_string(row):
return ''.join([chr(int(x)) for x in row])
return np.apply_along_axis(row_to_string, 1, np.asarray(x))
编辑:有关 3D 示例,请参阅此要点:https://gist.github.com/PeterTillema/215f0a6474849a06001e10804e5a6eca
【问题讨论】:
-
请注意,
str.join()接受生成器作为参数,无需浪费内存创建临时list;"".join(chr(int(x)) for x in row) -
apply_along_axis只是一个迭代器;它没有什么神奇之处,尤其是在使用二维数组时。尝试与 apply 等一起使用什么功能。frompyfunc(list,1,1)为您做什么?