2016-03-10 518 views
0

說我有一個2D RGB數組,它是顯示爲:添加元素

[[[ 0. 0. 0.5] 
    [ 0.5 0. 0.5] 
    [ 0. 0. 0.5] 
    ..., 
    [ 0.5 0. 0.5] 
    [ 0. 0. 0.5] 
    [ 0. 0. 0.5]]] 

我想在RB列中的單個元素添加到數組的G一部分,所以它看起來像:

[[[ 0. 0.5 0.5] 
    [ 0.5 1.0 0.5] 
    [ 0. 0.5 0.5] 
    ..., 
    [ 0.5 1.0 0.5] 
    [ 0. 0.5 0.5] 
    [ 0. 0.5 0.5]]] 

什麼是最簡單的方法來解決這個問題?

+1

這看起來像3D給我。 – zondo

回答

1

你可以使用

arr[...,1] = arr[...,0] + arr[...,2] 

或許更可讀,

R, G, B = arr[...,0], arr[...,1], arr[...,2] 
G[:] = R + B 

由於Garr基本剖面,它是一個視圖。修改視圖會修改原始數組。 分配G[:] = ...修改G inplace。所以分配修改arr


import numpy as np 

arr = np.array([[[ 0., 0., 0.5], 
       [ 0.5, 0., 0.5], 
       [ 0., 0., 0.5], 
       [ 0.5, 0., 0.5], 
       [ 0., 0., 0.5], 
       [ 0., 0., 0.5]]]) 

R, G, B = arr[...,0], arr[...,1], arr[...,2] 
G[:] = R + B 

print(arr) 

產生

[[[ 0. 0.5 0.5] 
    [ 0.5 1. 0.5] 
    [ 0. 0.5 0.5] 
    [ 0.5 1. 0.5] 
    [ 0. 0.5 0.5] 
    [ 0. 0.5 0.5]]] 
2

我會將您的清單列表轉換爲numpy.array,然後對其進行分片。

import numpy as np 

a=np.array([[ 0. , 0. , 0.5], 
      [ 0.5, 0. , 0.5], 
      [ 0. , 0. , 0.5]]) 
a[:,1] += a[:,0] + a[:,2] 
print(a) 

輸出:

array([[ 0. , 0.5, 0.5], 
     [ 0.5, 1. , 0.5], 
     [ 0. , 0.5, 0.5]])