一 数组(Arrays)
使用array函数创建时,参数必须是由方括号括起来的列表,而不能使用多个数值作为参数调用array。
一个numpy数组是一个由不同数值组成的网格。网格中的数据都是同一种数据类型,可以通过非负整型数的元组来访问。维度的数量被称为数组的阶,数组的大小是一个由整型数构成的元组,可以描述数组不同维度上的大小。
1 创建数组
import numpy as np a = np.zeros((2,2)) # 创建一个全是零的数组 print (a) # Prints "[[ 0. 0.] # [ 0. 0.]]" b = np.ones((1,2)) # 创建一个全是1的数组 print (b) # Prints "[[ 1. 1.]]" c = np.full((2,2), 7) # 创建一个恒定值得数组 print (c) # Prints "[[ 7. 7.] # [ 7. 7.]]" d = np.eye(2) # 创建一个 2x2 单位矩阵 print (d) # Prints "[[ 1. 0.] # [ 0. 1.]]" e = np.random.random((2,2)) # Create an array filled with random values print (e) # Might print "[[ 0.91940167 0.08143941] # [ 0.68744134 0.87236687]]"2 数组的方法
(1)numpy.shape():
输入参数:类似数组(比如列表,元组)等,或是数组
返回:一个整型数字的元组,元组中的每个元素表示相应的数组每一维的长度
# 一维列表 L = range(5) a=np.shape(L) print(a) # 二维列表 A = [[1,2,3],[4,5,6]] b = np.shape(A) print(b)
(5,) (2, 3)(2)numpy.reshape( a,newshape,order):
函数功能:给予数组一个新的形状,而不改变它的数据
输入参数:
a:将要被重塑的类数组或数组
newshape:整数值或整数元组。新的形状应该兼容于原始形状。如果是一个整数值,表示一个一维数组的长度;如果是元组,一个元素值可以为-1,此时该元素值表示为指定,此时会从数组的长度和剩余的维度中推断出
order:可选(忽略)
返回:一个新的形状的数组
A = [[1,2,3],[4,5,6]] b = np.reshape(A,6) c = np.reshape(A,(3,-1)) print(b) print(c)
[1 2 3 4 5 6] [[1 2] [3 4] [5 6]]
(3)ndarray.ndim:数组的维数(即数组轴的个数),等于秩。最常见的为二维数组(矩阵)
(4)ndarray.size:数组元素的总个数,等于shape属性中元组元素的乘积
3 访问数组
(1)切片:和Python列表类似,numpy数组可以使用切片语法。因为数组可以是多维的,所以你必须为每个维度指定
好切片
import numpy as np a = np.array([[1,2,3,4],[5,6,7,8],[9,10,11,12]]) print(a) b = a[:2,1:3] print(b) print(a[0,1]) b[0,0] = 77 print(a[0,1])
[[ 1 2 3 4] [ 5 6 7 8] [ 9 10 11 12]] [[2 3] [6 7]] 2 77
a = np.array([[1,2,3,4],[5,6,7,8],[9,10,11,12]]) print(a) row_r1 = a[1,:] row_r2 = a[1:2,:] print(row_r1,row_r1.shape) print(row_r2,row_r2.shape) col_r1 = a[:,1] col_r2 = a[:,1:2] print(col_r1 ,col_r1.shape) print(col_r2 ,col_r2.shape)
[[ 1 2 3 4] [ 5 6 7 8] [ 9 10 11 12]] [5 6 7 8] (4,) [[5 6 7 8]] (1, 4) [ 2 6 10] (3,) [[ 2] [ 6] [10]] (3, 1)(2)整型数组访问:当我们使用切片语法访问数组时,得到的总是原数组的一个子集。整型数组访问允许我们利用其它
数组的数据构建一个新的数组:
a =np.array([[1,2],[3,4],[5,6]]) print(a) print(a[[0,1,2],[0,1,0]]) print(a[[0,0],[1,1]]) print(np.array([a[0,1],a[0,1]]))
[[1 2] [3 4] [5 6]] [1 4 5] [2 2] [2 2]整型数组访问语法还有个有用的技巧,可以用来选择或者更改矩阵中每行中的一个元素:
a =np.array([[1,2,3],[4,5,6],[7,8,9],[10,11,12]]) print(a) b = np.array([0,2,0,1]) print(a[np.arange(4),b]) a[np.arange(4),b] +=10 print(a)
[[ 1 2 3] [ 4 5 6] [ 7 8 9] [10 11 12]] [ 1 6 7 11] [[11 2 3] [ 4 5 16] [17 8 9] [10 21 12]](3)布尔型数组访问:布尔型数组访问可以让你选择数组中任意元素。通常,这种访问方式用于选取数组中满足某些条
件的元素
a = np.array([[1,2], [3, 4], [5, 6]]) bool_idx = (a > 2) print bool_idx # 打印 "[[False False] # [ True True] # [ True True]]" print a[bool_idx] # 打印 "[3 4 5 6]" print a[a > 2] # 打印"[3 4 5 6]"