scipy: cómo insertar una matriz de ceros en otra matriz con diferentes dimensiones

Si tengo una matriz:

myzeros=scipy.zeros((c*pos,c*pos))  , c=0.1 , pos=100

y una matriz:

grid=scipy.ones((pos,pos))

¿Cómo puedo insertar los ceros en la cuadrícula en posiciones aleatorias? El problema está en las dimensiones.

Sé que en 1d puedes hacer:

myzeros=sc.zeros(c*pos) # array full of (zeros)
grid=sc.ones(pos)         # grid full of available positions(ones)
dist=sc.random.permutation(pos)[:c*pos] # distribute c*pos zeros in random
                                        # positions
grid[dist]=myzeros

Intenté algo similar pero no funciona. Probé también: myzeros=sc.zeros(c*pos), Pero todavía no funciona.

preguntado el 08 de noviembre de 11 a las 16:11

1 Respuestas

Hay varias formas, pero la más fácil parece ser convertir primero la cuadrícula 2D en una cuadrícula 1D y proceder como en el caso 1D, luego convertir nuevamente a 2D:

c = 0.1
pos = 100
myzeros=scipy.zeros((c*pos,c*pos))
myzeros1D = myzeros.ravel()
grid=scipy.ones((pos,pos))
grid1D = grid.ravel()
dist=sc.random.permutation(pos*pos)[:c*pos*c*pos]
grid1D[dist]=myzeros1D
myzeros = myzeros1D.reshape((c*pos,c*pos))
grid = grid1D.reshape((pos, pos))

EDITAR: para responder a su comentario: si solo desea que una parte de los myzeros vaya a la matriz de cuadrícula, debe hacer que la matriz dist sea más pequeña. Ejemplo:

dist = scipy.random.permutation(pos*pos)[:c*pos]
grid1D[dist] = myzeros1D[:c*pos]

Y espero que sepa que esta última línea se puede escribir como

grid1D[dist] = 0

si realmente solo desea establecer esos elementos en uno solo en lugar de usar los elementos de otra matriz.

respondido 09 nov., 11:16

: Hola, cuando ejecuto el último comando me da "grid = grid1D.reshape ((cpos, cpos)) ".. ¿Alguna idea? ¡Gracias! - George

Hola, no estoy seguro de lo que quieres decir con eso, pero he tenido un error en la última línea. ¿Quizás simplemente olvidó presionar enter en la última línea? - xubuntix

: Tuve un error tipográfico, funciona, pero el problema es que quiero insertar cpos ceros en la cuadrícula = scipy.ones ((pos, pos)). Con lo anterior, inserta el número de forma de la matriz myzeros (cpos cpos) en la cuadrícula ¡No puedo encontrar la manera de hacerlo! - George

: ¡Exactamente lo que quiero! Muchas gracias. Además, no es necesario crear el myzeros = scipy.zeros ((cpos, cpos)). Se puede hacer con myzeros 1D (esto se refiere a mi segunda pregunta). - George

No es la respuesta que estás buscando? Examinar otras preguntas etiquetadas or haz tu propia pregunta.