2015-06-22 23 views
6

Sto lavorando per impostare alcune condizioni al contorno per un modello di falda acquifera, e sono in grado di impostare l'intera prima riga su un valore costante, ma non sull'intera prima colonna. Sto usando np.zeros((11, 1001)) per creare una matrice vuota. Qualcuno sa perché sono riuscito a definire la prima riga, ma non la prima colonna? Ho notato la riga in questione qui sotto.Come impostare la prima colonna su un valore costante di una matrice numPy np.zeros vuota?

import numpy as np 

x = range(0, 110, 10) 
time = range(0, 5005, 5) 
xSize = len(x) 
timeSize = len(time) 

dx = 10 
dt = 5 
Sy = 0.1 
k = 0.002 

head = np.zeros((11, 1001)) 

head[0:][0] = 16 # sets the first row to 16 
head[0][0:] = 16 # DOESN'T set the first column to 16 

for t in time: 
    for i in x[1:len(x)-1]: 
     head[t+1][i] = head[t][i] + ((dt*k)/(2*Sy)) * (((head[t][i-1]**2) - (2*head[t][i]**2) + (head[t][i+1]**2))/(dx**2)) 

risposta

4

Tutto quello che dovete fare è di cambiare

head[0][0:] 

a

head[:, 0] = 16 

Se si desidera cambiare la prima riga si può solo fare:

head[0, :] = 16 

EDIT:

Nel caso in cui ci si chiede anche come è possibile modificare una quantità arbitraria di valori in una riga/colonna arbitraria:

myArray = np.zeros((6, 6)) 

Ora abbiamo impostato nella riga 2 3 valori a 16:

myArray[2, 1:4] = 16. 
array([[ 0., 0., 0., 0., 0., 0.], 
     [ 0., 0., 0., 0., 0., 0.], 
     [ 0., 16., 16., 16., 0., 0.], 
     [ 0., 0., 0., 0., 0., 0.], 
     [ 0., 0., 0., 0., 0., 0.], 
     [ 0., 0., 0., 0., 0., 0.]]) 

Gli stessi lavori per le colonne:

myArray[2:5, 4] = -4. 
array([[ 0., 0., 0., 0., 0., 0.], 
     [ 0., 0., 0., 0., 0., 0.], 
     [ 0., 16., 16., 16., -4., 0.], 
     [ 0., 0., 0., 0., -4., 0.], 
     [ 0., 0., 0., 0., -4., 0.], 
     [ 0., 0., 0., 0., 0., 0.]]) 

E se poi si desidera modificare anche determinati valori, ad es. due righe diverse allo stesso tempo puoi farlo in questo modo:

myArray[[0, 5], 0:3] = 10. 
array([[ 10., 10., 10., 0., 0., 0.], 
     [ 0., 0., 0., 0., 0., 0.], 
     [ 0., 16., 16., 16., -4., 0.], 
     [ 0., 0., 0., 0., -4., 0.], 
     [ 0., 0., 0., 0., -4., 0.], 
     [ 10., 10., 10., 0., 0., 0.]]) 
+0

@Nitish Grazie a entrambi! – AF2k15

1

È possibile utilizzare una sintassi simile.

In [12]: head = np.zeros((11,101)) 

In [13]: head 
Out[13]: 
array([[ 0., 0., 0., ..., 0., 0., 0.], 
     [ 0., 0., 0., ..., 0., 0., 0.], 
     [ 0., 0., 0., ..., 0., 0., 0.], 
     ..., 
     [ 0., 0., 0., ..., 0., 0., 0.], 
     [ 0., 0., 0., ..., 0., 0., 0.], 
     [ 0., 0., 0., ..., 0., 0., 0.]]) 

In [14]: head[:,0] = 42.0 

In [15]: head 
Out[15]: 
array([[ 42., 0., 0., ..., 0., 0., 0.], 
     [ 42., 0., 0., ..., 0., 0., 0.], 
     [ 42., 0., 0., ..., 0., 0., 0.], 
     ..., 
     [ 42., 0., 0., ..., 0., 0., 0.], 
     [ 42., 0., 0., ..., 0., 0., 0.], 
     [ 42., 0., 0., ..., 0., 0., 0.]])