Me gustaría descubrir cómo puedo crear esta matriz sin poner cada valor en cada mano.

¿Hay alguna forma de usar la información de que cada valor es el valor duplicado de su predecesor, excepto el primero?

Mi código es el siguiente:


import numpy as np

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

print(Matrix)

1
R.K. 9 may. 2019 a las 18:49

4 respuestas

La mejor respuesta

Puede usar np.arange, y aprovecha el hecho de que son poderes de 2:

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

array([[  1,   2,   4],
       [  8,  16,  32],
       [ 64, 128, 256]], dtype=int32)
4
yatu 10 may. 2019 a las 14:43

Puedes usar np.vander:

np.vander([2], 9, True).reshape(3, 3)
# array([[  1,   2,   4],
#        [  8,  16,  32],
#        [ 64, 128, 256]])
1
Paul Panzer 9 may. 2019 a las 22:49

También podrías hacer algo como esto:

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

Esto está escrito en JavaScript. Para Python, simplemente cambie lo que necesita, la idea principal sigue ahí. Creo en Python, se agrega en lugar de presionar.

1
rowlandev 9 may. 2019 a las 16:01

Aquí hay una solución manipulada por jurado:

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]])
0
kmario23 9 may. 2019 a las 16:29