当结果二维未知时,如何重塑 numpy 数组?

How do you reshape numpy array when the resulting 2 dimensions are unknown?

我有一个 numpy 数组,a,形状为 (2501, 4)。我想将它重新整形为一个 3 维数组,即结果形状应该是:(x, y, 4)

在这种情况下,如何确定整数值 xy? 我知道如果只有一个值未知,我可以使用 -1。例如:

b = a.reshape(-1, 41, 4)
b.shape  # (61, 41, 4)

您可以使用

在 NumPy 中搜索数字 x 的所有因子
factors = numpy.where(x % numpy.arange(1, x // 2 + 1) == 0)  # array([1, 41, 61])

问题是可能有很多解决方案,其中最简单的是:

x = 1,    y = 2501
x = 2501, y = 1

否则你可以使用所有能平分这个数的因数:

x = 41, y = 61
x = 61, y = 41

有找到一个数的所有因子的解决方案 - 它称为 "prime factorization",例如 this answer:

def primes(n):
    """Copied from  (author: Daniel Fischer)"""
    primfac = []
    d = 2
    while d*d <= n:
        while (n % d) == 0:
            primfac.append(d)
            n //= d
        d += 1
    if n > 1:
        primfac.append(n)
    return primfac

>>> primes(2501)
[41, 61]

请注意,结果的所有组合都是可能的解决方案。例如 16 有这些解决方案:

>>> primes(16)
[2, 2, 2, 2]

因此,以下任何一种可能性都符合您的要求:

 1 & 16
 2 &  8
 4 &  4
 8 &  2
16 &  1

所以你不能自动执行此操作,因为有人 "needs to decide" 选择哪一个。