这是否正确使用压扁?

时间:2018-03-05 21:00:59

标签: python numpy flatten

我试图使用以下内容展平列表:

wd = ['this' , 'is']

np.asarray(list(map(lambda x : list(x) , wd))).flatten()

返回:

array([['t', 'h', 'i', 's'], ['i', 's']], dtype=object)

当我期待一个char数组时:['t','h','i','s','i','s']

正确使用flatten

3 个答案:

答案 0 :(得分:3)

不,这不适用于numpy.ndarray.flatten

二维NumPy数组必须是矩形的,否则它们将被转换为对象数组(或者它将抛出异常)。对象数组展平将无法正常工作(因为它不会使“对象”变平)而矩形是不可能的,因为你的单词有不同的长度。

当处理字符串(或字符串数​​组)时,NumPy根本不会展平它们,既不创建数组,也不试图“展平”它:

>>> import numpy as np
>>> np.array(['fla', 'tten'])
array(['fla', 'tten'], dtype='<U4')
>>> np.array(['fla', 'tten']).flatten()
array(['fla', 'tten'], dtype='<U4')

幸运的是,你可以简单地使用“普通”Python功能来展平迭代,只提一个例子:

>>> wd = ['this' , 'is']
>>> [element for sequence in wd for element in sequence]
['t', 'h', 'i', 's', 'i', 's']

您可能需要查看以下Q + A以获取更多解决方案和解释:

答案 1 :(得分:2)

只有一个列表迭代:

[u for i in np.asarray(list(map(lambda x : list(x) , wd))) for u in i]

给你这个:

['t', 'h', 'i', 's', 'i', 's']

虽然正如评论所说,您可以使用''.join()作为特定示例,但这样做的好处是可以使用numpy数组和列表列表:

test = np.array(range(10)).reshape(2,-1)

[u for i in test for u in i]

返回一个单位列表:

[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]

答案 2 :(得分:1)

env PATH=(string join ":" /my/path $PATH) mycommand.sh