Python 如何在numpy中正确地连接二维数据数组中的字符串元素?
在下面的代码中,我希望Python 如何在numpy中正确地连接二维数据数组中的字符串元素?,python,string,numpy,Python,String,Numpy,在下面的代码中,我希望arr2返回与lst2相同的字符串列表,但它没有返回。为什么lst2和arr2不同?是否有任何NumPythonic方法使arr2返回与lst2相同的字符串列表 代码: 输出: lst: [['MI', '', 'P'], ['B', 'N', 'SUFS'], ['KOS', 'XJRXA', 'JJHW'], ['ARI', 'TPKI', ''], ['VR', 'EYR', '']] arr: [['MI', '', 'P'], ['B', 'N', 'SUFS']
arr2
返回与lst2
相同的字符串列表,但它没有返回。为什么lst2
和arr2
不同?是否有任何NumPythonic方法使arr2
返回与lst2
相同的字符串列表
代码:
输出:
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']
熊猫很容易做到:
pd.DataFrame(arr).sum(axis=1)
np.apply\u沿轴()的原因是它从第一行推断结果中字符串的长度。由于第一行以MIP
结尾,因此所有行的容量都为3个字符,这不是您想要的
有一个关于apply\u沿_轴()的NumPy bug报告。
提供了更多信息:熊猫将很容易做到:
pd.DataFrame(arr).sum(axis=1)
np.apply\u沿轴()的原因是它从第一行推断结果中字符串的长度。由于第一行以MIP
结尾,因此所有行的容量都为3个字符,这不是您想要的
有一个关于沿\u轴应用的NumPy bug报告()
,其中包含更多信息:谢谢。
我从中找到了答案
谢谢。
我从中找到了答案
我不知道第一行决定数组的数据类型。我会考虑熊猫,但熊猫对我来说很难。。。无论如何,谢谢np.array(lst,object).sum(axis=1)
的工作原理与pandas
sum
的工作原理相同np.sum
应用于对象数据类型数组使用对象的“+”方法,在本例中为Python字符串。我不知道第一行决定数组的数据类型。我会考虑熊猫,但熊猫对我来说很难。。。无论如何,谢谢np.array(lst,object).sum(axis=1)
的工作原理与pandas
sum
的工作原理相同np.sum
应用于对象数据类型数组时使用对象的“+”方法,在本例中为Python字符串。apply_沿_轴
并不是对简单行迭代的改进。它不会更快。沿_轴应用
并不是简单的行迭代的改进。它不是更快。
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())