当得到的2维未知时,你如何重塑numpy数组?

时间:2017-05-10 10:33:19

标签: python arrays numpy reshape

我有一个numpy数组a,其形状为(2501, 4)。我想将其重塑为三维数组,即结果形状应为:(x, y, 4)

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

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

2 个答案:

答案 0 :(得分:1)

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

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

否则,您可以使用均匀划分数字的所有因子:

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

有解决方案可以找到一个数字的所有因子 - 它被称为“素数因子化”,例如this answer

def primes(n):
    """Copied from https://stackoverflow.com/a/16996439/5393381 (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

所以你不能自动化这个,因为有人“需要决定”选择哪一个。

答案 1 :(得分:0)

您可以使用

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