una - posicion matriz python
¿Cómo creo una matriz/matriz vacía en NumPy? (9)
Creo que quieres manejar la mayor parte del trabajo con listas y luego utilizar el resultado como una matriz. Tal vez esta es una manera;
ur_list = []
for col in columns:
ur_list.append(list(col))
mat = np.matrix(ur_list)
No puedo entender cómo usar una matriz o matriz de la forma en que normalmente usaría una lista. Quiero crear una matriz (o matriz) vacía y luego agregarle una columna (o fila) a la vez.
Por el momento, la única forma en que puedo encontrar esto es como:
mat = None
for col in columns:
if mat is None:
mat = col
else:
mat = hstack((mat, col))
Mientras que si fuera una lista, haría algo como esto:
list = []
for item in data:
list.append(item)
¿Hay alguna forma de usar ese tipo de notación para matrices o matrices NumPy ?
Dependiendo de para qué lo esté utilizando, es posible que deba especificar el tipo de datos (consulte ''dtype'' ).
Por ejemplo, para crear una matriz 2D de valores de 8 bits (adecuada para usar como imagen monocromática):
myarray = numpy.empty(shape=(H,W),dtype=''u1'')
Para una imagen RGB, incluya el número de canales de color en la forma: shape=(H,W,3)
También es posible que desee considerar la inicialización con cero con numpy.zeros
lugar de usar numpy.empty
. Vea la nota here .
Lo examiné mucho porque necesitaba usar un númpy.array como conjunto en uno de mis proyectos escolares y necesitaba ser inicializado vacío ... No encontré ninguna respuesta relevante aquí en , así que empecé garabateando algo
# Initialize your variable as an empty list first
In [32]: x=[]
# and now cast it as a numpy ndarray
In [33]: x=np.array(x)
El resultado será:
In [34]: x
Out[34]: array([], dtype=float64)
Por lo tanto, puede inicializar directamente una matriz np de la siguiente manera:
In [36]: x= np.array([], dtype=np.float64)
Espero que esto ayude.
Para crear una matriz multidimensional vacía en NumPy (por ejemplo, una matriz 2D m*n
para almacenar su matriz), en caso de que no sepa cuántas filas agregará y no le importará el costo computacional que mencionó Stephen Simmons (a saber, reconstruyendo la matriz en cada anexo), puede exprimir a 0 la dimensión a la que desea agregar: X = np.empty(shape=[0, n])
.
De esta manera puede usar por ejemplo (aquí m = 5
que asumimos que no sabíamos al crear la matriz vacía, y n = 2
):
import numpy as np
n = 2
X = np.empty(shape=[0, n])
for i in range(5):
for j in range(2):
X = np.append(X, [[i, j]], axis=0)
print X
que te dará:
[[ 0. 0.]
[ 0. 1.]
[ 1. 0.]
[ 1. 1.]
[ 2. 0.]
[ 2. 1.]
[ 3. 0.]
[ 3. 1.]
[ 4. 0.]
[ 4. 1.]]
Puedes aplicarlo para construir cualquier tipo de matriz, como ceros:
a = range(5)
a = [i*0 for i in a]
print a
[0, 0, 0, 0, 0]
Puedes usar la función de añadir. Para las filas:
>>> from numpy import *
>>> a = array([10,20,30])
>>> append(a, [[1,2,3]], axis=0)
array([[10, 20, 30],
[1, 2, 3]])
Para columnas:
>>> append(a, [[15],[15]], axis=1)
array([[10, 20, 30, 15],
[1, 2, 3, 15]])
EDITAR
Por supuesto, como se mencionó en otras respuestas, a menos que esté realizando algún procesamiento (por ejemplo, inversión) en la matriz / matriz CADA vez que le agregue algo, simplemente crearía una lista, la añadiré y luego la convertiré en una matriz .
Si no conoce el tamaño final de la matriz, puede incrementar el tamaño de la matriz de esta manera:
my_arr = numpy.zeros((0,5))
for i in range(3):
my_arr=numpy.concatenate( ( my_arr, numpy.ones((1,5)) ) )
print(my_arr)
[[ 1. 1. 1. 1. 1.] [ 1. 1. 1. 1. 1.] [ 1. 1. 1. 1. 1.]]
- Note el
0
en la primera línea. -
numpy.append
es otra opción. Se llamanumpy.concatenate
.
Tienes el modelo mental equivocado para usar NumPy de manera eficiente. Las matrices NumPy se almacenan en bloques contiguos de memoria. Si desea agregar filas o columnas a una matriz existente, la matriz completa debe copiarse en un nuevo bloque de memoria, creando espacios para los nuevos elementos que se almacenarán. Esto es muy ineficiente si se hace repetidamente para construir una matriz.
En el caso de agregar filas, su mejor apuesta es crear una matriz que sea tan grande como su conjunto de datos eventualmente y luego agregarle datos fila por fila:
>>> import numpy
>>> a = numpy.zeros(shape=(5,2))
>>> a
array([[ 0., 0.],
[ 0., 0.],
[ 0., 0.],
[ 0., 0.],
[ 0., 0.]])
>>> a[0] = [1,2]
>>> a[1] = [2,3]
>>> a
array([[ 1., 2.],
[ 2., 3.],
[ 0., 0.],
[ 0., 0.],
[ 0., 0.]])
Una matriz NumPy es una estructura de datos muy diferente de una lista y está diseñada para ser utilizada de diferentes maneras. Su uso de hstack
es potencialmente muy ineficiente ... cada vez que lo llama, todos los datos de la matriz existente se copian en uno nuevo. (La función de append
tendrá el mismo problema). Si desea construir su matriz una columna a la vez, puede que sea mejor que la mantenga en una lista hasta que finalice, y luego la convierta en una matriz.
p.ej
mylist = []
for item in data:
mylist.append(item)
mat = numpy.array(mylist)
item
puede ser una lista, una matriz o cualquier iterable, siempre que cada item
tenga el mismo número de elementos.
En este caso particular (los data
son algunos iterables que contienen las columnas de la matriz), simplemente puede usar
mat = numpy.array(data)
(También tenga en cuenta que usar la list
como nombre de variable probablemente no sea una buena práctica, ya que enmascara el tipo incorporado con ese nombre, lo que puede provocar errores).
EDITAR:
Si, por alguna razón, realmente desea crear una matriz vacía, puede usar numpy.array([])
, ¡pero esto rara vez es útil!