2017-06-01 49 views
1

我有一個3D陣列像甲用於沿所述第一軸線指數

A = np.random.randint(20,size=(4,2,2)) 
array([[[18, 8], 
    [ 2, 11]], 

    [[ 9, 8], 
    [ 9, 10]], 

    [[ 0, 1], 
    [10, 6]], 

    [[ 1, 8], 
    [ 4, 2]]]) 

將函數應用於一個3D陣列Python化算法我想要做的是一個函數應用於沿着軸線= 0一些索引。例如,我想將A [1]和A [3]乘以2並將10加上它們。我知道有一個選項是:

for index in [1,3]: 
    A[index] = A[index]*2+10 

其中給出:

array([[[18, 8], 
     [ 2, 11]], 

     [[28, 26], 
     [28, 30]], 

     [[ 0, 1], 
     [10, 6]], 

     [[12, 26], 
     [18, 14]]]) 

但我原來的數組的(2500,300,300)大小的,我需要的功能,適用於500個非 - 每次沿着軸= 0的連續指數。有沒有更快捷,更pythonic的方式來做到這一點?

+0

不,他們沒有固定的間隔。它們就像5組500個隨機整數,它們將用於將5個不同的函數應用於第一軸中的2500個索引。 @unutbu – Monobakht

回答

2

你可以使用階梯切割

A[1::2] = A[1::2] * 2 + 10 
A 

array([[[18, 8], 
     [ 2, 11]], 

     [[28, 26], 
     [28, 30]], 

     [[ 0, 1], 
     [10, 6]], 

     [[12, 26], 
     [18, 14]]]) 

或者假設你的片被命名爲slc

A[slc] = A[slc] * 2 + 10 
+0

正如我在上面的評論中提到的那樣,我的指數並不是有規律的間隔。所以我不能使用分步切片。但是,謝謝;) – Monobakht

+0

@Monobakht所以你知道當你應用函數時指數會是什麼? – piRSquared

+0

是的,在我的情況下,我確實有500個指數的列表。 – Monobakht