当结果二维未知时,如何重塑 numpy 数组?
How do you reshape numpy array when the resulting 2 dimensions are unknown?
我有一个 numpy 数组,a
,形状为 (2501, 4)
。我想将它重新整形为一个 3 维数组,即结果形状应该是:(x, y, 4)
。
在这种情况下,如何确定整数值 x
和 y
?
我知道如果只有一个值未知,我可以使用 -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" 选择哪一个。
我有一个 numpy 数组,a
,形状为 (2501, 4)
。我想将它重新整形为一个 3 维数组,即结果形状应该是:(x, y, 4)
。
在这种情况下,如何确定整数值 x
和 y
?
我知道如果只有一个值未知,我可以使用 -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" 选择哪一个。