### NumPy最重要的一个特点就是其N维数组对象(即ndarray)





NumPy最重要的一个特点就是其N维数组对象(即ndarray)¶













 



###  该对象是一个快速而灵活的大数据集容器。





该对象是一个快速而灵活的大数据集容器。¶



In








import numpy as npdata = [2,4,1.2,34,0]# 基本类型数组array = np.array(data)print(array)# 嵌套类型数组data_qt = [[1,3,5,7],[2,4,6,8]]array_qt = np.array(data_qt)print(array_qt)print(array_qt.ndim,array_qt.shape) 
         
         
    
     
      
[ 2.   4.   1.2 34.   0. ]
[[1 3 5 7]
 [2 4 6 8]]
2 (2, 4)
 
    

      … 
    
 
   
    
     
       
       
       
       
       
            
            
           

                
            
 
           
### 除非显式说明,np.array会尝试为新建的这个数组推断一个较为合适的数据类型。




除非显式说明,np.array会尝试为新建的这个数组推断一个较为合适的数据类型。¶



In












 

print(array.dtype)  # 数据类型print(array_qt.dtype) 
         
         
    
     
      
float64
int32
 
    

      … 
    
 
  
In
 
     
      
        
        
        
        
        
             
             
            

                 
             
 
            
## zeros和ones可以创建指定长度或维度的全0或全1数组。## empty可以创建一个没有任何具体值得数组。 
         
         
    
     
    

      … 
    
 
  
In
 
     
      
        
        
        
        
        
             
             
            

                 
             
 
            
zero = np.zeros((3,5))  # 创建3*5的二维数组,内容全为0print(zero)print("*"*70)empty = np.empty((2,3,4))  # 随机生成2块,3行,4列数据print(empty) 
         
         
    
     
      
[[0. 0. 0. 0. 0.]
 [0. 0. 0. 0. 0.]
 [0. 0. 0. 0. 0.]]
**********************************************************************
[[[2.62459657e+179 9.80546120e-095 1.74483681e-076 8.31856565e-072]
  [1.03106710e-259 3.15474899e+180 2.38954692e+180 1.46922886e+195]
  [4.82555778e+228 1.27873527e-152 6.20311190e+223 2.68212787e-110]]

 [[7.07381649e+194 6.47522084e+170 2.42775961e-154 2.79660159e-152]
  [1.82159989e+185 1.42853558e+248 1.87725413e-009 2.46008030e-154]
  [4.83245960e+276 1.05146955e-153 6.01334434e-154 4.82595977e+276]]]
 
    

      … 
    
 
  
In
 
     
      
        
        
        
        
        
             
             
            

                 
             
 
            
## ndarray的数据类型 
         
         
    
     
    

      … 
    
 
  
In
 
     
      
        
        
        
        
        
             
             
            

                 
             
 
            
print(np.array([1,2,3],dtype=np.float64))print(np.array([1,2,3],dtype=np.int32)) 
         
         
    
     
      
[1. 2. 3.]
[1 2 3]
 
    

      … 
    
 
  
In
 
     
      
        
        
        
        
        
             
             
            

                 
             
 
            
print(array[1:3]) 
         
         
    
     
      
[4.  1.2]
 
    

      … 
    
 
   
    
     
       
       
       
       
       
            
            
           

                
            
 
           
### 如果想得到ndarray切片的一份副本而非视图,就要显式地进行复制操作。




如果想得到ndarray切片的一份副本而非视图,就要显式地进行复制操作。¶













 



### 例如:array[1:3].copy()





例如:array[1:3].copy()¶













 



## 转置





转置¶



In











num = np.random.randn(3,2)num_t = num.Tnum_dot_t = np.dot(num,num_t)print(num)print("*"*50)print(num_t)print("*"*50)print(num_dot_t) 
         
         
    
     
      
[[ 0.66201371 -1.65036193]
 [ 0.36761897  1.23633097]
 [-0.56499644 -0.16034667]]
**************************************************
[[ 0.66201371  0.36761897 -0.56499644]
 [-1.65036193  1.23633097 -0.16034667]]
**************************************************
[[ 3.16195667 -1.79702476 -0.10940536]
 [-1.79702476  1.66365797 -0.40594496]
 [-0.10940536 -0.40594496  0.34493203]]
 
    

      … 
    
 
  
In
 
     
      
        
        
        
        
        
             
             
            

                 
             
 
            
points = np.arange(-5, 5, 0.01)  #创建numpy数组,从-5~5,步长为0.01,共1000个数据xs, ys = np.meshgrid(points, points)  # np.meshgrid(arg1, arg2)函数接收两个一维数组,返回二维矩阵 
             

 
             
import matplotlib.pyplot as pltz = np.sqrt(xs ** 2 + ys ** 2)plt.imshow(z, cmap=plt.cm.gray)plt.colorbar()plt.title("Image plot of :\n{}".format(z))print("矩阵乘积:\n{}".format(z)) 
         
         
    
     
      
矩阵乘积:
[[7.07106781 7.06400028 7.05693985 ... 7.04988652 7.05693985 7.06400028]
 [7.06400028 7.05692568 7.04985815 ... 7.04279774 7.04985815 7.05692568]
 [7.05693985 7.04985815 7.04278354 ... 7.03571603 7.04278354 7.04985815]
 ...
 [7.04988652 7.04279774 7.03571603 ... 7.0286414  7.03571603 7.04279774]
 [7.05693985 7.04985815 7.04278354 ... 7.03571603 7.04278354 7.04985815]
 [7.06400028 7.05692568 7.04985815 ... 7.04279774 7.04985815 7.05692568]]



python 函数调用 数组参数 python 数组引用_数组



In


 

xarr = np.array([1.1, 1.2, 1.3, 1.4, 1.5])yarr = np.array([2.1, 2.2, 2.3, 2.4, 2.5])              

              
cond = np.array([True, False, True, True, False])# 根据cond的值进行选择,如果为True则保留xarr的值,否则保留yarr的值result = [(x if c else y)for x, y, c in zip(xarr, yarr, cond)]# 使用whereresult_where = np.where(cond, xarr, yarr)              

              
print("基于if:\n{}".format(result))print("基于where:\n{}".format(result_where))print("{},{}".format(result[0], result_where[0]))

基于if:[1.1, 2.2, 1.3, 1.4, 2.5] 基于where: [1.1 2.2 1.3 1.4 2.5] 1.1,1.1



 


### np.where 的第二个和第三个参数不必是数组,它们都可以是标量值。




np.where 的第二个和第三个参数不必是数组,它们都可以是标量值。¶


 


### 在数据分析中,where通常用于根据另一个数组而产生一个新的数组。


在数据分析中,where通常用于根据另一个数组而产生一个新的数组。¶

In
                                                                                          

                 
             
             
arr = np.random.randn(4, 4)# arr_demo = np.random.randn(5, 4)print(arr)print("="*60)arr_new = np.where(arr > 0, 6, -6)  # 正值设置为6负值设置为-6arr_new_arr = np.where(arr > 0, 6, arr)  # 只将正值设置为6              

              
print("{}\n{}".format(arr_new, arr_new_arr))

[[-1.07154786  0.75732606  1.9794616   0.66978179] [-1.04776947  0.65248274 -0.09888813  0.12076266]
 [ 2.70432762  0.05325661  0.78152884 -0.4545642 ]
 
 [-0.66935063 -0.82916227 1.07172145 0.5246802 ]]
[[-6 6 6 6] 
 [-6 6 -6 6] 
 [ 6 6 6 -6] 
 [-6 -6 6 6]] 
 [[-1.07154786 6. 6. 6. ] 
 [-1.04776947 6. -0.09888813 6. ] 
 [ 6. 6. 6. -0.4545642 ] 
 [-0.66935063 -0.82916227 6. 6. ]]



 


### any,all用于判断array是否全部是True


any,all用于判断array是否全部是True¶


In
                                                                      

               
           
           
bools = np.array([False, False, True, False])bool_any = bools.any()bool_all = bools.all()print("{}\n{}".format(bool_any, bool_all))                        
True 

False   

    … 
  
 
                                                            

              
          
          
### unique:唯一化,自带排序

unique:唯一化,自带排序¶

In
                                                                      

               
           
           
names = np.array(['Bob','Joe','Michial','Bob','Joe','Joe'])ints = np.array([3, 2, 4, 2, 2, 3, 5, 3])            

            
names_unique = np.unique(names)ints_unique = np.unique(ints)            

            
print("{}\n{}".format(names_unique,ints_unique))                        
['Bob' 'Joe' 'Michial'] 

[2 3 4 5]   

    … 
  
 
                                                            

              
          
          
### 判断一个数组中的值在另一个数组中是否存在

判断一个数组中的值在另一个数组中是否存在¶


In
                                                                      

               
           
           
values = np.array([3, 4, 2, 3, 1, 2])if_contains_values = np.in1d(values, [1, 3, 5])print(if_contains_values)                        
[ True False False  True  True False]   

    … 
  
 
In