我有一个numpy数组a
,其形状为(2501, 4)
。我想将其重塑为三维数组,即结果形状应为:(x, y, 4)
。
在这种情况下,如何确定整数值x
和y
?
我知道如果只有一个未知的值,我可以使用-1。例如:
b = a.reshape(-1, 41, 4)
b.shape # (61, 41, 4)
答案 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])