web-dev-qa-db-fra.com

Diviser ndarray par scalaire - Numpy / Python

Je me demande simplement comment pourrais-je faire une telle chose sans utiliser de boucles.

J'ai fait un test simple en essayant d'appeler une division comme nous le faisons avec un numpy.array, mais j'ai obtenu le même ndarray.

N = 2
M = 3

matrix_a = np.array([[15., 27., 360.],
            [180., 265., 79.]])
matrix_b = np.array([[.5, 1., .3], 
            [.25, .7, .4]])

matrix_c = np.zeros((N, M), float)

n_size = 360./N
m_size = 1./M

for i in range(N):
    for j in range(M):
        n = int(matrix_a[i][j] / n_size) % N
        m = int(matrix_b[i][j] / m_size) % M
        matrix_c[n][m] += 1 

matrix_c / (N * M)
print matrix_c  

Je suppose que cela devrait être assez simple. Toute aide serait appréciée.

14
pceccon

Je pense que vous souhaitez modifier matrix_c Sur place:

matrix_c /= (N * M)

Ou probablement moins efficace:

matrix_c = matrix_c / (N * M) 

L'expression matrix_c / (N * M) ne change pas matrix_c - elle crée une nouvelle matrice.

8
Nigel Tufnel

Une autre solution serait d'utiliser numpy.divide

matric_c = np.divide(matrix_c, N*M)

Assurez-vous simplement que N * M est un flotteur au cas où vous recherchez la précision.

8
Kenan