NumPy高級索引-----廣播

1.首先,咱們回顧一下NumPy的數組屬性數組

np.shape:重塑數組  如 :a = np.array([[1,2,3],[4,5,6]]) a.shape = (3,2) 函數

np.reshape:重塑數組  如:a = np.array([[1,2,3],[4,5,6]])    b = a.reshape(3,2) 佈局

np.ndim:返回數組的維數spa

np.itemsize:返回數組中每一個元素的字節單位長度code

np.flage:當前值的狀態,屬性參考上一篇對象

2.來自現有數據的 一些函數方法blog

(1)ndarray就很少解釋了排序

(2)np.frombuffer:暴露緩衝區接口的任何對象都用做參數來返回索引

import numpy as np s =  'Hello World' a = np.frombuffer(s, dtype =  'S1') print (a)

輸出:接口

['H'  'e'  'l'  'l'  'o'  ' '  'W'  'o'  'r'  'l'  'd']

(3)np.fromiter:從任何可迭代對象構建一個ndarray對象,返回一個新的一維數組

# 從列表中得到迭代器 
import numpy as np list = range(5) it = iter(list) # 使用迭代器建立 ndarray 
x = np.fromiter(it, dtype = float) print (x)

輸出:

[0.   1.   2.   3.   4.]

(4)np.linspace:指定了範圍之間的均勻間隔數量,而不是步長

import numpy as np x = np.linspace(10,20,5) print (x)

輸出:

[10.   12.5   15.   17.5  20.]

(5)np.logspace:其中包含在對數刻度上均勻分佈的數字。 刻度的開始和結束端點是某個底數的冪

# 將對數空間的底數設置爲 2 
import numpy as np a = np.logspace(1,10,num =  10,  base  =  2) print (a)

輸出:

[ 2.     4.     8.    16.    32.    64.   128.   256.    512.   1024.]

3.高級索引

(1)整數索引:

 

import numpy as np x = np.array([[1,  2],  [3,  4],  [5,  6]]) y = x[[0,1,2],  [0,1,0]] print (y)

 

輸出:

[1  4  5]

(2)布爾索引:當結果對象是布爾運算(例如比較運算符)的結果時,將使用此類型的高級索引

 

import numpy as np x = np.array([[  0,  1,  2],[  3,  4,  5],[  6,  7,  8],[  9,  10,  11]]) # 如今咱們會打印出大於 5 的元素 
print  '大於 5 的元素是:'  
print x[x >  5]

輸出:

大於 5 的元素是: [ 6  7  8  9 10 11]

4.廣播

釋義:廣播是指 NumPy 在算術運算期間處理不一樣形狀的數組的能力。 對數組的算術運算一般在相應的元素上進行。

例如:

import numpy as np a = np.array([1,2,3,4]) b = np.array([10,20,30,40]) c = a * b      print (c)

輸出:

[10   40   90   160]

  對於不一樣維度的數組,本沒法進行元素之間的操做,但NumPy提供了這個功能。例如

import numpy as np a = np.array([[0.0,0.0,0.0],[10.0,10.0,10.0],[20.0,20.0,20.0],[30.0,30.0,30.0]]) b = np.array([1.0,2.0,3.0]) print (a + b)

輸出:

[[ 1. 2. 3.] [ 11. 12. 13.] [ 21. 22. 23.] [ 31. 32. 33.]]

5.數組上的迭代

迭代器對象np.nditer,它是一個有效的多維迭代器對象,能夠用於在數組上進行迭代。

 

a = np.arange(0,60,5) a = a.reshape(3,4) for x in np.nditer(a): print (x)

 

輸出:

0 5 10 15 20 25 30 35 40 45 50 55

注意:迭代的順序匹配數組的內容佈局,而不考慮特定的排序。----也就是說,數組的變換和佈局是不影響對其原始數組的迭代的,最終會按着原始數組的形式進行迭代。若是通過了拷貝,那就以拷貝後的新數組爲原始對象。

   廣播的迭代:

import numpy as np a = np.arange(0,60,5) a = a.reshape(3,4) print ( '第一個數組:') print (a) print  ('\n') print  ('第二個數組:' ) b = np.array([1,  2,  3,  4], dtype = int) print (b) print  ('\n' ) print ( '修改後的數組是:' ) for x,y in np.nditer([a,b]): print ( "%d:%d"  %  (x,y))

輸出:

第一個數組: [[ 0 5 10 15] [20 25 30 35] [40 45 50 55]] 第二個數組: [1 2 3 4] 修改後的數組是:
0:1 5:2 10:3 15:4 20:1 25:2 30:3 35:4 40:1 45:2 50:3 55:4

 

下一篇接着講NumPy的函數和Matplolib庫。

相關文章
相關標籤/搜索