Python入门之Numpy
Numpy属性
- ndim: 维度,即确定最底层一个元素位置需要用到的索引个数
- shape: 行数和列数
- size: 元素个数
import numpy as np
a = np.array([[0,1,2], [3,4,5], [6,7,8]])
a.ndim # 维度
2
a.shape # 行数和列数
(3, 3)
a.size # 元素个数
9
Numpy的创建
Example1 创建特定数组
a = np.array([[2,23,4],[3,34,5]])
print(a)
[[ 2 23 4]
[ 3 34 5]]
Example2 创建全零数组
a = np.zeros((3,3))
print(a)
[[ 0. 0. 0. 0. 0.]]
Example3 创建全一数组
a = np.ones((3,3))
print(a)
[[ 1. 1. 1.]
[ 1. 1. 1.]
[ 1. 1. 1.]]
Example4 创建全空数组,其包含的值是无意义的(慎用)
a = np.empty((3,2))
print(a)
[[ 0. 0.]
[ 0. 0.]
[ 0. 0.]]
Example5 用 arange 创建连续数组
a = np.arange(10 , 20 ,2)
print(a)
[10 12 14 16 18]
Example6 用 reshape 改变数组的形状
a = np.arange(12).reshape((3, 4))
print(a)
[[ 0 1 2 3]
[ 4 5 6 7]
[ 8 9 10 11]]
Example7 用 linspace 创建线段型数组
a = np.linspace(1, 10, 20) # 开始端为1,结束端为10,分割成20个数据
print(a)
[ 1. 1.47368421 1.94736842 2.42105263 2.89473684
3.36842105 3.84210526 4.31578947 4.78947368 5.26315789
5.73684211 6.21052632 6.68421053 7.15789474 7.63157895
8.10526316 8.57894737 9.05263158 9.52631579 10. ]
Numpy的基础运算
矩阵针对元素的运算有加、减、乘、除、乘方,还有一些函数运算,例如求和(sum())、求最大值(max())、求余弦值(sin())等等。
a = np.arange(1,7).reshape((2,3))
print(a)
[[1 2 3]
[4 5 6]]
b = np.arange(2,8).reshape((2,3))
print(b)
[[2 3 4]
[5 6 7]]
b * a # 加、减、乘、除类似
array([[ 2, 6, 12],
[20, 30, 42]])
b + 2 # 加、减、乘、除类似
array([[4, 5, 6],
[7, 8, 9]])
np.sum(a) # 求最大值、最小值类似
21
np.sin(a) # 其他数学函数类似
array([[ 0.84147098, 0.90929743, 0.14112001],
[-0.7568025 , -0.95892427, -0.2794155 ]])
print(a < 4) # 针对每一个元素
[[ True True True]
[False False False]]
矩阵乘法:
np.dot(a, b.reshape((3, 2))) # (2 * 3) . (3 * 2)
array([[28, 34],
[64, 79]])
最大元素和最小元素的索引:
np.argmin(b)
0
np.argmax(b)
5
均值与中位数:
mean = np.mean(b)
median = np.median(b)
print("均值:{0} 中位数:{1}".format(mean, median))
均值:4.5 中位数:4.5
累加运算与累差运算:
np.cumsum(b)
array([ 2, 5, 9, 14, 20, 27], dtype=int32)
np.diff(b) # 每一行后一项与前一项的差
array([[1, 1],
[1, 1]])
矩阵的转置:
np.transpose(b)
array([[2, 5],
[3, 6],
[4, 7]])
a.T
array([[1, 4],
[2, 5],
[3, 6]])
Numpy的输出
索引和切边与List类似,此处不做赘述。
按行输出与按列输出:
for row in b:
print(row)
[2 3 4]
[5 6 7]
for column in b.T:
print(column)
[2 5]
[3 6]
[4 7]
Numpy的合并
上下合并 np.vstack()
np.vstack((a,b)) # 接收一个元组做参数
array([[1, 2, 3],
[4, 5, 6],
[2, 3, 4],
[5, 6, 7]])
左右合并 np.hstack()
np.hstack((a,b))
array([[1, 2, 3, 2, 3, 4],
[4, 5, 6, 5, 6, 7]])
利用轴的概念直接合并 axis参数
np.concatenate((a,b), axis = 0)
array([[1, 2, 3],
[4, 5, 6],
[2, 3, 4],
[5, 6, 7]])
np.concatenate((a,b), axis = 1)
array([[1, 2, 3, 2, 3, 4],
[4, 5, 6, 5, 6, 7]])
Numpy的分割
纵向分割
仅能等分,中间的参数表示分成的array个数
A = np.arange(12).reshape(3,4)
np.split(A, 2, axis=1)
[array([[0, 1],
[4, 5],
[8, 9]]), array([[ 2, 3],
[ 6, 7],
[10, 11]])]
横向分割
np.split(A, 3, axis=0)
[array([[0, 1, 2, 3]]), array([[4, 5, 6, 7]]), array([[ 8, 9, 10, 11]])]
不等量分割
np.array_split(A, 3, axis=1)
[array([[0, 1],
[4, 5],
[8, 9]]), array([[ 2],
[ 6],
[10]]), array([[ 3],
[ 7],
[11]])]
Numpy的 = 与copy()
赋值具有关联性,copy()是一个新的拷贝
a
array([[1, 2, 3],
[4, 5, 6]])
b = a # 将a赋值给b
b
array([[1, 4, 3],
[4, 5, 6]])
a[0][1] = 4 #修改a中一个元素
a
array([[1, 4, 3],
[4, 5, 6]])
b # b中对应元素也发生了改变
array([[1, 4, 3],
[4, 5, 6]])
copy()的矩阵不会随之改变
b = a.copy()
a[1][1] = 11
a
array([[ 1, 4, 3],
[ 4, 11, 6]])
b
array([[1, 4, 3],
[4, 5, 6]])