天天看点

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