vectores una multiplicacion matriz matrices insertar elementos como columna añadir array agregar python numpy

una - matrices python 3



Cómo agregar elementos en una matriz numpy (6)

Agregar datos a una matriz existente es algo natural que desea hacer para cualquier persona que tenga experiencia con Python. Sin embargo, si te encuentras agregando regularmente arreglos grandes, rápidamente descubrirás que NumPy no lo hace de manera fácil o eficiente como lo hará una list Python. Descubrirá que cada acción de "adición" requiere la reasignación de la memoria de la matriz y la duplicación de los requisitos de memoria a corto plazo. Entonces, la solución más general al problema es tratar de asignar matrices para que sean tan grandes como el resultado final de su algoritmo. Luego realice todas sus operaciones en subconjuntos ( slices ) de esa matriz. La creación y destrucción de matrices debería idealmente minimizarse.

Dicho esto, a menudo es inevitable y las funciones que hacen esto son:

para matrices de 2-D:

para arreglos en 3-D (el más arriba):

para matrices ND:

Necesito lograr la siguiente tarea:

de:

a = array([[1,3,4],[1,2,3]...[1,2,1]])

(agregue un elemento a cada fila) a:

a = array([[1,3,4,x],[1,2,3,x]...[1,2,1,x]])

He intentado hacer cosas como una [n] = matriz ([1,3,4, x])

pero Numpy se quejó de la falta de coincidencia de forma. Traté de iterar a través de a elemento x y anexarlo a cada elemento, pero los cambios no se reflejan.

¿Alguna idea sobre cómo puedo lograr esto?


Agregar un único escalar podría ser un poco más fácil como ya se ha mostrado (y también sin convertir a float) expandiendo el escalar a un tipo python-list-type:

import numpy as np a = np.array([[1,3,4],[1,2,3],[1,2,1]]) x = 10 b = np.hstack ((a, [[x]] * len (a) ))

devuelve b como:

array([[ 1, 3, 4, 10], [ 1, 2, 3, 10], [ 1, 2, 1, 10]])

Agregar una fila se puede hacer de la siguiente manera:

c = np.vstack ((a, [x] * len (a[0]) ))

devuelve c como:

array([[ 1, 3, 4], [ 1, 2, 3], [ 1, 2, 1], [10, 10, 10]])


Si x es solo un valor escalar único, puede intentar algo como esto para asegurar la forma correcta de la matriz que se está anexando / concatenando a la columna más a la derecha de a :

import numpy as np a = np.array([[1,3,4],[1,2,3],[1,2,1]]) x = 10 b = np.hstack((a,x*np.ones((a.shape[0],1))))

devuelve b como:

array([[ 1., 3., 4., 10.], [ 1., 2., 3., 10.], [ 1., 2., 1., 10.]])


Una forma de hacerlo (puede que no sea la mejor) es crear otra matriz con los nuevos elementos y hacer column_stack. es decir

>>>a = array([[1,3,4],[1,2,3]...[1,2,1]]) [[1 3 4] [1 2 3] [1 2 1]] >>>b = array([1,2,3]) >>>column_stack((a,b)) array([[1, 3, 4, 1], [1, 2, 3, 2], [1, 2, 1, 3]])


import numpy as np a = np.array([[1,3,4],[1,2,3],[1,2,1]]) b = np.array([10,20,30]) c = np.hstack((a, np.atleast_2d(b).T))

devuelve c :

array([[ 1, 3, 4, 10], [ 1, 2, 3, 20], [ 1, 2, 1, 30]])


target = [] for line in a.tolist(): new_line = line.append(X) target.append(new_line) return array(target)