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库。

相关文章
相关标签/搜索