花哨的索引(fancy indexing)
花哨的索引不同於前面的簡單索引得到的標量,而是直接得到的是傳遞的索引陣列。
且能夠讓我們能夠快速獲得並修改複雜的陣列值得字資料集。
探索花哨的索引
花哨的索引在概念上非常簡單,它意味著傳遞乙個索引陣列來一次性獲得多個陣列元素。
import numpy as np
rand=np.random.randomstate(42)
x=rand.randint(
100,size=10)
[x[3
],x[7]
,x[2]]
#[71,86, 14]
利用花哨的索引,結果的形狀與索引陣列的形狀一致,而不是與被索引陣列的形狀一致:
import numpy as np
rand=np.random.randomstate(42)
x=rand.randint(
100,size=10)
ind=np.array([[
3,7]
,[4,
5]])
x[ind]
# 上面和下面相比較
array([[
71,86]
,[60,
20]])
花哨的索引也對多個維度適用。下面舉乙個例子:
import numpy as np
x=np.arange(12)
.reshape(3,
4)[[
0123
][45
67][
891011]]
row=np.array([0
,1,2
])column=np.array([2
,1,3
])print
(x[row,column]
)# the output will be [ 2 5 11]
結果的第乙個值是找的x[0, 2],第二個值是找的x[0, 1],第三個值是找的x[2, 3].
在花哨的索引中,索引值的配對規則會遵循python廣播的規則。
所以,當乙個列向量和乙個行向量組合在乙個索引時,會得到乙個二維的結果。
print(x[row[:, np.newaxis], column])
# the output will be
[[ 2 1 3]
[ 6 5 7]
[10 9 11]]
上面的結果是怎麼來的呢,其實就是
[[0
][1] 與 [2,
1,3] 的組合, 第乙個值是x[0,
2],第二個值是x[0,
1],第三個值是x[0,
3],以此類推 [2
]]
也就相當於是做了個矩陣的行與列的元素組合,這裡插入一下截圖
按照廣播的規則,乙個維度為13,乙個維度為3 * 1,就只能變成3 3和3 * 3,這樣就會變成
[
[0,0,0
][1,
1,1] 兩個維度相同得三維陣列,然後進行元素配對,從而得到乙個3
*3的結果矩陣 [2
,2,2
]]
值得記住的事,花哨的索引返回的值反映的事廣播後的索引陣列的形狀,而不是被索引的陣列的形狀。
組合索引
花哨的索引可以和其他索引方案相結合起來形成更加強大的索引操作:
花哨的索引和簡單的索引組合使用:
[[0
123]
[456
7][8
91011]
]x[2,
[2,0
,1]]
array([10
,8,9
])
花哨的索引和切片組合使用:
[[0
123]
[456
7][8
91011]
]x[1:
,[2,
0,1]
]array([[
6,4,
6],[
10,8,
9]])
花哨的索引和掩碼的組合使用:
mask=np.array([1
,0,1
,0],dtype=
bool
)x[row[
:, np.newaxis]
, mask]
array([[
0,2]
,[4,
6],[
8,10]
])
索引選項的組合可以實現非常靈活的獲取和修改元素的操作。 資料分析Numpy(7) 資料的輸入輸出
genfromtxt匯入資料 簡而言之,genfromtxt主要運用兩種迴圈第乙個迴圈以字串序列轉換檔案的每一行。第二個迴圈將每個字串轉換為適當的資料型別,考慮到缺失值的情況。genfromtxt的唯一強制引數是資料的 它可以是乙個字串,一串字串或乙個生成器。如果提供了單個字串,則假定它是本地或遠端...
numpy資料分析
2020 11 2 import array arr array.array i list range 10 i表示整型,生成序列後不能改變資料型別 多維陣列ndarray方便處理多維度運算,運算效率高 nparr np.array list range 10 修改值,浮點數取整數段 nparr 2...
資料分析 Numpy
什麼是numpy numpy這個詞 於兩個單詞 numerical和python。numpy是python中的乙個運算速度非常快的乙個數學庫,它非常重視陣列,很多的資料科學的包都是依賴於numpy的。它允許你在python中進行向量和矩陣計算,並且由於許多底層函式實際上是用c編寫的,因此你可以體驗在...