我所擁有的是一個字符串列表。我想要做的是將它轉換爲2D numpy數組,其中result[i, j]
將是第i個字符串(最好是float)的第j個字符的ascii代碼。將字符串列表表示爲其ASCII碼的一個numpy數組
我知道我可以使用list(map(float, map(ord, single_line_from_list)))
來獲得我的浮動列表,將其轉換爲1D數組,然後循環所有這些來獲得我的最終數組。但我想知道是否有更優雅的方式來做到這一點。
我所擁有的是一個字符串列表。我想要做的是將它轉換爲2D numpy數組,其中result[i, j]
將是第i個字符串(最好是float)的第j個字符的ascii代碼。將字符串列表表示爲其ASCII碼的一個numpy數組
我知道我可以使用list(map(float, map(ord, single_line_from_list)))
來獲得我的浮動列表,將其轉換爲1D數組,然後循環所有這些來獲得我的最終數組。但我想知道是否有更優雅的方式來做到這一點。
一個選項可以使用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
參數來填補諾內斯:
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)]
是否有您所使用的'str'而不是用numpy的的字符串類型之一ndarray一個'list'一個特別的原因? – o11c
另外,當所有的值都符合'dtype = uint8'時,我不確定你認爲你通過'dtype = float'獲得了什麼,這是存儲的少得多,並且通常根據需要進行轉換。 – o11c