2016-02-06 2 views
1

мне нужно манипулировать Numpy массив:Python NumPy массив манипуляции

Мой массив имеет followng формат:

x = [1280][720][4] 

Массив данных хранит изображения в третьем измерении:

x[0][0] = [Red,Green,Blue,Alpha] 

Теперь мне нужно манипулировать моим массивом в следующем виде:

x = [1280][720] 
x[0][0] = Red + Green + Blue/3 

Мой текущий код экстремально медленно и я хочу использовать Numpy манипуляции массива, чтобы ускорить его:

for a in range(0,719): 
    for b in range(0,1279): 
     newx[a][b] = x[a][b][0]+x[a][b][1]+x[a][b][2] 
x = newx    

Кроме того, если это возможно я нужен код для работы переменных размеров массивов.

Thansk Alot

ответ

1

Используйте numpy.mean функции:

import numpy as np 

n = 1280 
m = 720 

# Generate a n * m * 4 matrix with random values 
x = np.round(np.random.rand(n, m, 4)*10) 

# Calculate the mean value over the first 3 values along the 2nd axix (starting from 0) 
xnew = np.mean(x[:, :, 0:3], axis=2) 
  • x[:, :, 0:3] дает первые 3 значения в 3-м измерении, см: numpy indexing

  • axis=2 указывает, вдоль которой оси матрицы вычисляется среднее значение.

+1

Спасибо за помощь, есть способ сохранить свои 3 размеров , Итак, xnew [0] [0] = [x]? –

+0

Использование: 'xnew_3 = x [:,:, 0: 3]' – bastelflp

+0

Извините, если я не понял, я хочу сохранить среднее значение в третьем измерении. 'x [1280,720,1]' @bastelflp –

0

фрагмент альфа-канал из массива, а затем суммировать массив вдоль оси RGB и разделить на 3:

x = x[:,:,:-1] 
x_sum = x.sum(axis=2) 
x_div = x_sum/float(3) 
Смежные вопросы