我得到了一系列列表,如下所示:
'[[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)
但我不确定这样做是否有任何好处。