在下面的代码中,我希望arr2
返回与lst2
相同的字符串列表,但不会。为什么lst2
和arr2
不同?是否有任何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']
答案 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())