我是 NumPy 的新手,仍然想知道使用内置函数可以轻松做什么,而不是自己动手。
我正在尝试分割一个数组,但让子数组中的不均匀性均匀分布在整个结果中。
为了说明这一点,如果我在 numpy 中运行以下命令:
a = np.arange(17)
for c in [3, 5, 10]:
chunks = np.array_split(a, c)
sizes = np.array([x.size for x in chunks])
print(f'{c} chunks sizes: {sizes}')
我得到的输出是:
3 chunks sizes: [6 6 5]
5 chunks sizes: [4 4 3 3 3]
10 chunks sizes: [2 2 2 2 2 2 2 1 1 1]
我希望它逐渐设置尺寸以调整不均匀性,而不是贪婪地调整。换句话说,我希望输出看起来更像:
3 chunks sizes: [6 5 6]
5 chunks sizes: [3 4 3 4 3]
10 chunks sizes: [2 2 1 2 2 1 2 2 1 2]
是否有一种干净的方法可以使用 NumPy 内置函数来执行此操作,或者是滚动我自己的唯一好方法(根据需要向上/向下舍入)?从到目前为止我在文档中发现的内容来看,我很可能必须自己动手。
仅限 NumPy 的解决方案:
a = np.arange(17)
for c in [3, 5, 10]:
chunks = np.array_split(a, c)
sizes = np.array([x.size for x in chunks])
print(f'{c} chunks sizes: {sizes}')
alt_sizes = np.diff(np.round(np.average(sizes) * np.arange(0, len(sizes)+1)))
print(f' alt: {alt_sizes.astype(int)}')
3 chunks sizes: [6 6 5]
alt: [6 5 6]
5 chunks sizes: [4 4 3 3 3]
alt: [3 4 3 4 3]
10 chunks sizes: [2 2 2 2 2 2 2 1 1 1]
alt: [2 1 2 2 1 2 2 2 1 2]