2017-05-10 50 views
0

我有一個numpy數組,a形狀(2501, 4)。我想將它重新整形成一個3維數組,也就是說,結果形狀應該是:(x, y, 4)當結果2維度未知時,你如何重塑numpy數組?

在這種情況下,我如何確定整數值xy? 我知道如果只有一個值是未知的,我可以使用-1。例如:

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

您可以使用任何因子「2501」。你將如何決定選擇哪一個? –

回答

1
搜索在NumPy的一些 x的所有因素

的問題是,有這個可能很多的解決方案,以最平凡的人是:

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 

所以你不能自動完成這個因爲有人「需要決定」,其中之一選擇。

+0

「......你不能自動化......」抑制了我的精神。我希望有人很快證明它是錯誤的。 – Gathide

+0

@Gathide我已經列出了你可能的組合,你想要哪一個?如果您事先知道需要哪種組合(如「首次找到組合」),則可以自動進行。但是你的問題沒有提到任何「條件」,所以正確的答案是:你不能。 – MSeifert

+0

你的答案沒問題。我只希望你的自動化建議被證明是錯誤的,即使它將來也是如此。 – Gathide

0

可以使用

factors = numpy.where(x % numpy.arange(1, x // 2 + 1) == 0) # array([1, 41, 61]) 
+0

對於'x = 2501',我得到了'factors =(array([0,40,60]),)'!它是如何工作的? – Gathide