簡體   English   中英

numpy 3維數組中間索引錯誤

[英]numpy 3 dimension array middle indexing bug

當我使用帶有numpy模塊的python 2.7時,我似乎發現了一個錯誤:

import numpy as np
x=np.arange(3*4*5).reshape(3,4,5)
x

在這里,我得到了完整的'x'數組,如下所示:

array([[[ 0,  1,  2,  3,  4],
        [ 5,  6,  7,  8,  9],
        [10, 11, 12, 13, 14],
        [15, 16, 17, 18, 19]],

       [[20, 21, 22, 23, 24],
        [25, 26, 27, 28, 29],
        [30, 31, 32, 33, 34],
        [35, 36, 37, 38, 39]],

       [[40, 41, 42, 43, 44],
        [45, 46, 47, 48, 49],
        [50, 51, 52, 53, 54],
        [55, 56, 57, 58, 59]]])

然后我嘗試索引sheet [1]中的單行值:

x[1][0][:]

結果:

array([20, 21, 22, 23, 24])

但在我嘗試索引工作表[1]中的單個列時出了點問題:

x[1][:][0]

結果仍與上一個相同:

array([20, 21, 22, 23, 24])

它應該是數組([20,25,30,35])??

使用范圍索引中間索引似乎有些不對勁?

不,這不是一個錯誤。

當你使用[:]你使用切片表示法,它占用了所有列表:

l = ["a", "b", "c"]
l[:]
#output:
["a", "b", "c"]

在你的情況下:

x[1][:]
#output:
array([[20, 21, 22, 23, 24],
       [25, 26, 27, 28, 29],
       [30, 31, 32, 33, 34],
       [35, 36, 37, 38, 39]])

你真正想要的是使用numpy indexing表示法:

x[1, : ,0]
#output:
array([20, 25, 30, 35])

這不是一個錯誤。 x[1][:][0]不是多重索引(“給我第一個維度為1,第二個為任意,第三個為0”的元素)。 相反,您正在索引三次,三個對象。

x1 = x[1]     # x1 is the first 4x5 subarray
x2 = x1[:]    # x2 is same as x1
x3 = x2[0]    # x3 is the first row of x2

要使用多個索引,您希望在單個切片中執行此操作:

x[1, :, 0]

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM