Как построить элегантный массив чисел степеней 2? - PullRequest
1 голос
/ 09 мая 2019

Я хотел бы выяснить, как я могу создать этот массив, не вкладывая каждое отдельное значение в руку.

Есть ли способ, как я могу использовать информацию о том, что каждое значение является удвоенным значением своего предшественника, кроме первого?

Мой код выглядит следующим образом:


import numpy as np

Matrix = np.array([1,2,4,8,16,32,64,128,256]).reshape (3,3)

print(Matrix)

Ответы [ 4 ]

4 голосов
/ 09 мая 2019

Вы можете использовать np.arange и использовать тот факт, что они являются степенями 2:

2**np.arange(9).reshape(-1, 3)

array([[  1,   2,   4],
       [  8,  16,  32],
       [ 64, 128, 256]], dtype=int32)
1 голос
/ 10 мая 2019

Вы можете использовать np.vander:

np.vander([2], 9, True).reshape(3, 3)
# array([[  1,   2,   4],
#        [  8,  16,  32],
#        [ 64, 128, 256]])
1 голос
/ 09 мая 2019

Вы также можете сделать что-то вроде этого:

var myRandomArray = [1];
var i = 1;
var num = 1;
while (i < 9) {
  myRandomArray.push(num = num * 2);
  i = i + 1;
}

Это написано на JavaScript.Для Python просто переключите то, что вам нужно, основная идея все еще там.Я верю в Python, это добавление вместо push.

0 голосов
/ 09 мая 2019

Вот решение для жюри:

In [10]: total_num = 9 

In [11]: np.array([2**n for n in range(0, total_num)]).reshape(3, -1) 
Out[11]: 
array([[  1,   2,   4],
       [  8,  16,  32],
       [ 64, 128, 256]])
...