天天看點

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:傳回數組的維數

np.itemsize:傳回數組中每個元素的位元組機關長度

np.flage:目前值的狀态,屬性參考上一篇

2.來自現有資料的 一些函數方法

(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庫。

轉載于:https://www.cnblogs.com/qianshuixianyu/p/9245145.html