Numpy 按特定数量的元素将数组拆分为子数组
Numpy Split array to sub arrays by specific number of elements
例如
我有一个积分列表
a = np.array([[0,0,0],
[1,1,1],
[2,2,2],
[3,3,3],
[4,4,4],
[5,5,5],
[6,6,6],
[7,7,7],
[8,8,8],
[9,9,9]])
我还有另一个数组表示元素的个数
b = np.array([2,0,3,5])
如何根据数组b的元素个数拆分数组a得到输出
[[[0,0,0],[1,1,1]],
[],
[[2,2,2],[3,3,3],[4,4,4]],
[[5,5,5],[6,6,6],[7,7,7],[8,8,8],[9,9,9]]]
您可以在b
上使用numpy.split
using cumsum
来获得分割点:
out = np.split(a, b.cumsum()[:-1])
输出:
[array([[0, 0, 0],
[1, 1, 1]]),
array([], shape=(0, 3), dtype=int64),
array([[2, 2, 2],
[3, 3, 3],
[4, 4, 4]]),
array([[5, 5, 5],
[6, 6, 6],
[7, 7, 7],
[8, 8, 8],
[9, 9, 9]])]
如果你想要列表:
out = [x.tolist() for x in np.split(a, b.cumsum()[:-1])]
输出:
[[[0, 0, 0], [1, 1, 1]],
[],
[[2, 2, 2], [3, 3, 3], [4, 4, 4]],
[[5, 5, 5], [6, 6, 6], [7, 7, 7], [8, 8, 8], [9, 9, 9]]]
中级:
b.cumsum()[:-1]
# array([2, 2, 5])
例如
我有一个积分列表
a = np.array([[0,0,0],
[1,1,1],
[2,2,2],
[3,3,3],
[4,4,4],
[5,5,5],
[6,6,6],
[7,7,7],
[8,8,8],
[9,9,9]])
我还有另一个数组表示元素的个数
b = np.array([2,0,3,5])
如何根据数组b的元素个数拆分数组a得到输出
[[[0,0,0],[1,1,1]],
[],
[[2,2,2],[3,3,3],[4,4,4]],
[[5,5,5],[6,6,6],[7,7,7],[8,8,8],[9,9,9]]]
您可以在b
上使用numpy.split
using cumsum
来获得分割点:
out = np.split(a, b.cumsum()[:-1])
输出:
[array([[0, 0, 0],
[1, 1, 1]]),
array([], shape=(0, 3), dtype=int64),
array([[2, 2, 2],
[3, 3, 3],
[4, 4, 4]]),
array([[5, 5, 5],
[6, 6, 6],
[7, 7, 7],
[8, 8, 8],
[9, 9, 9]])]
如果你想要列表:
out = [x.tolist() for x in np.split(a, b.cumsum()[:-1])]
输出:
[[[0, 0, 0], [1, 1, 1]],
[],
[[2, 2, 2], [3, 3, 3], [4, 4, 4]],
[[5, 5, 5], [6, 6, 6], [7, 7, 7], [8, 8, 8], [9, 9, 9]]]
中级:
b.cumsum()[:-1]
# array([2, 2, 5])