函数np.array_split(x, n)
将数组x
拆分为n
大致相同大小的块。我想知道如果想要获得数组拆分位置的索引,最方便的形式是什么。
ix = [(start1, end1), (start2, end2), ... (startn, endn)]
这样
np.array_split(x, n)[i] == x[ix[i][0]:ix[i][1]]
我可以想到一些尴尬的方法来获得这个,但并不简单。
答案 0 :(得分:0)
您知道子阵列的长度。只需使用它们来查找开始和结束索引:
a = np.arange(10)
res = np.array_split(a, 3)
end = list(np.add.accumulate([len(x) for x in res]))
start = [0] + end[:-1]
ix = list(zip(start, end))
现在,指数是:
>>> ix
[(0, 4), (4, 7), (7, 10)]
获得此结果:
>>> res
[array([0, 1, 2, 3]), array([4, 5, 6]), array([7, 8, 9])]
或:
for i in range(3):
assert np.all(np.array_split(a, 3)[i] == a[ix[i][0]:ix[i][1]])