一 数组(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]"