Numpy(3)

存取元素

  • 切片
    • 整數數組
    • 布爾數組
'''
# coding=utf-8  

Created on 2016-9-5 

@author: paulsweet 

'''
import numpy as np

整數數組

a=np.arange(10)
a
array([0, 1, 2, 3, 4, 5, 6, 7, 8, 9])
a[:-1]
array([0, 1, 2, 3, 4, 5, 6, 7, 8])
a[0:5] # 用範圍作爲下標獲取數組的一個切片,包括a[0],不包括a[5].
array([0, 1, 2, 3, 4])
a[2:4] = 100,101    # 下標還可以用來修改元素的值
a
array([  0,   1, 100, 101,   4,   5,   6,   7,   8,   9])
a[1:-1:2]   # 範圍中的第三個參數表示步長,2表示隔一個元素取一個元素
array([  1, 101,   5,   7])
np.count_nonzero(a)
9
np.shape(a)
(10,)
a[::-1] # 省略範圍的開始下標和結束下標,步長爲-1,整個數組頭尾顛倒
array([  9,   8,   7,   6,   5,   4, 101, 100,   1,   0])
a[5:1:-2] # 步長爲負數時,開始下標必須大於結束下標,注意是不包括1的,即不包括a[5].
array([  5, 101])
x=np.arange(10,1,-1)
x
array([10,  9,  8,  7,  6,  5,  4,  3,  2])
b=x[np.array([3,3,-3,8])]# 獲取x中的下標爲3, 3, -3, 8的4個元素,組成一個新的數組
b
array([7, 7, 4, 2])
b[3]=3 #不直接用切片的方式複製,用這種方法可以杜絕共享空間的問題
x
array([10,  9,  8,  7,  6,  5,  4,  3,  2])

布爾數組

當使用布爾數組b作爲下標存取數組x中的元素時,將收集數組x中所有在數組b中對應下標爲True的元素。使用布爾數組作爲下標獲得的數組不和原始數組共享數據空間,注意這種方式只對應於布爾數組,不能使用布爾列表。

布爾數組一般不是手工產生,而是使用布爾運算的ufunc函數產生,關於ufunc函數請參照 ufunc運算 一節

x=np.arange(5,0,-1)
x
array([5, 4, 3, 2, 1])
x[np.array([True, False, True, False, False])]
array([5, 3])
x[[True, False, True, False, False]]
# 如果是布爾列表,則把True當作1, False當作0,按照整數序列方式獲取x中的元素
/Users/momo/.pyenv/versions/anaconda3-4.0.0/lib/python3.5/site-packages/ipykernel/__main__.py:1: FutureWarning: in the future, boolean array-likes will be handled as a boolean array index
  if __name__ == '__main__':





array([4, 5, 4, 5, 5])
x[np.array([True, False, True, True])]
# 布爾數組的長度不夠時,不夠的部分都當作False
/Users/momo/.pyenv/versions/anaconda3-4.0.0/lib/python3.5/site-packages/ipykernel/__main__.py:1: VisibleDeprecationWarning: boolean index did not match indexed array along dimension 0; dimension is 5 but corresponding boolean dimension is 4
  if __name__ == '__main__':





array([5, 3, 2])
x=np.random.rand(10) # 產生一個長度爲10,元素值爲0-1的隨機數的數組
x
array([ 0.76056934,  0.68242247,  0.02221122,  0.80615371,  0.41637496,
        0.24943804,  0.09309115,  0.93440525,  0.73598332,  0.19905471])
x>0.5
# 數組x中的每個元素和0.5進行大小比較,得到一個布爾數組,True表示x中對應的值大於0.5
array([ True,  True, False,  True, False, False, False,  True,  True, False], dtype=bool)
x[x>0.5]
# 使用x>0.5返回的布爾數組收集x中的元素,因此得到的結果是x中所有大於0.5的元素的數組
array([ 0.76056934,  0.68242247,  0.80615371,  0.93440525,  0.73598332])
發佈了121 篇原創文章 · 獲贊 10 · 訪問量 6萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章