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