将不带分隔符的嵌套数字列表字符串转换为2D NumPy数组



我得到了一系列列表,如下所示:

'[[0123][1234][3456]]'

但我想把它插入到int的2D NumPy数组中。

结果应该是[[0, 1, 2, 3], [1, 2, 3, 4], [3, 4, 5, 6]]

有没有一种简单的方法可以做到这一点,而不需要首先遍历字符串,每个数字都将其转换为int并插入列表,最后将其插入NumPy对象?

您已经提到的直接解决方案是使用[]括号剥离输入字符串,创建嵌套列表并将其转换为NumPy数组:

s = '[[0123][1234][3456]]'
t = (
s
.strip('][')  # '0123][1234][3456'
.split('][')  # ['0123', '1234', '3456']
)
a = np.array([[int(v) for v in u] for u in t])

您可以使用np.fromiter来代替内部列表理解:

a = np.array([np.fromiter(u, dtype=int) for u in t])

使用np.stack组合内部一维阵列也同样有效:

a = np.stack([np.fromiter(u, dtype=int) for u in t])

类似于在Python中协调np.frometer和多维数组,您可以首先使用np.fromiter创建一个包含所有数字的一维数组,然后将其重塑为二维数组:

from itertools import chain
a = np.fromiter(chain.from_iterable(t), dtype=int).reshape(len(t), -1)

但我不确定这样做是否有任何好处。

最新更新