如何正确连接numpy的2-d ndarray中的字符串元素?

时间:2019-06-16 08:08:16

标签: python string numpy

在下面的代码中,我希望arr2返回与lst2相同的字符串列表,但不会。为什么lst2arr2不同?是否有任何NumPythonic方法使arr2返回与lst2相同的字符串列表?

代码:

import numpy as np

lst = [['MI', '', 'P'], 
       ['B', 'N', 'SUFS'],
       ['KOS', 'XJRXA', 'JJHW'],
       ['ARI', 'TPKI', ''],
       ['VR', 'EYR', '']]

arr = np.array(lst)

arr2 = np.apply_along_axis(lambda x: "".join(x), 1, arr)
lst2 = list(map(lambda x: "".join(x), lst))

print('lst:', lst)
print('arr:', arr.tolist())
print('lst2:', lst2)
print('arr2:', arr2.tolist())

输出:

lst: [['MI', '', 'P'], ['B', 'N', 'SUFS'], ['KOS', 'XJRXA', 'JJHW'], ['ARI', 'TPKI', ''], ['VR', 'EYR', '']]
arr: [['MI', '', 'P'], ['B', 'N', 'SUFS'], ['KOS', 'XJRXA', 'JJHW'], ['ARI', 'TPKI', ''], ['VR', 'EYR', '']]
lst2: ['MIP', 'BNSUFS', 'KOSXJRXAJJHW', 'ARITPKI', 'VREYR']
arr2: ['MIP', 'BNS', 'KOS', 'ARI', 'VRE']

2 个答案:

答案 0 :(得分:1)

熊猫会轻松做到这一点:

keep-alive

const MoveableComponent = new Vue({ el: '#some-id', template: `...`, data: { ... }, methods: { changeText() { ... }, moveTo(element) { element.appendChild(this.$el) } } }) 给您带来麻烦的原因是,它从第一行推断出结果中字符串的长度。由于您在第一行中以pd.DataFrame(arr).sum(axis=1) 结尾,因此所有行的容量均为3个字符,这不是您想要的。

np.apply_along_axis()的NumPy错误报告,其中包含更多信息:https://github.com/numpy/numpy/issues/8352

答案 1 :(得分:1)

谢谢。 我从https://github.com/numpy/numpy/issues/8352#issuecomment-488133970找到了答案

import numpy as np

lst = [['MI', '', 'P'], ['B', 'N', 'SUFS'], ['KOS', 'XJRXA', 'JJHW'], ['ARI', 'TPKI', ''], ['VR', 'EYR', '']]
arr = np.array(lst)

arr2 = np.apply_along_axis(lambda x: np.asarray("".join(x), dtype=object), 1, arr)
# https://github.com/numpy/numpy/issues/8352#issuecomment-488133970
lst2 = list(map(lambda x: "".join(x), lst))

print('lst:', lst)
print('arr:', arr.tolist())
print('lst2:', lst2)
print('arr2:', arr2.tolist())