我所拥有的是字符串列表。我想用它做的是将它转换为2D numpy数组,其中result[i, j]
将是来自第i个字符串的第j个字符的ascii代码(最好是float)。
我知道我可以使用list(map(float, map(ord, single_line_from_list)))
获取我的浮点数列表,将其转换为1D数组,然后循环所有这些以获取我的最终数组。但我想知道是否有更优雅的方式来做到这一点。
答案 0 :(得分:2)
您可以使用嵌套列表理解。
import numpy as np
array = np.array([[float(ord(character)) for character in word] for word in words])
答案 1 :(得分:0)
一个选项可以是使用scipy.sparse.coo_matrix
创建稀疏矩阵,然后将其转换为密集:
from scipy.sparse import coo_matrix
lst = ['hello', 'world!!']
idx, idy, val = zip(*((i, j, ord(c)) for i, s in enumerate(lst) for j, c in enumerate(s)))
coo_matrix((val, (idx, idy)), shape=(max(idx)+1, max(idy)+1)).todense()
#matrix([[104, 101, 108, 108, 111, 0, 0],
# [119, 111, 114, 108, 100, 33, 33]])
或者使用izip_longest(python2)/zip_longest(python3)
中的itertools
:
from itertools import izip_longest
list(zip(*izip_longest(*map(lambda s: map(ord, s), lst))))
# [(104, 101, 108, 108, 111, None, None), (119, 111, 114, 108, 100, 33, 33)]
这会给出 2d 列表。您可以使用fillvalue
参数填充Nones:
list(zip(*izip_longest(*map(lambda s: map(ord, s), lst), fillvalue=0)))
# [(104, 101, 108, 108, 111, 0, 0), (119, 111, 114, 108, 100, 33, 33)]