numpy基础(2)
一、多维数组的转置
1. 部分转置
arr=np.random.randint(1,10,(4,6,3))
array([[[5, 1, 9],
[9, 1, 5],
[8, 7, 6],
[2, 5, 3],
[5, 2, 1],
[3, 3, 4]],
[[8, 2, 1],
[1, 4, 9],
[3, 5, 9],
[8, 6, 8],
[7, 2, 5],
[3, 2, 2]],
[[3, 6, 7],
[2, 4, 7],
[6, 4, 2],
[6, 2, 7],
[4, 7, 7],
[1, 7, 2]],
[[5, 9, 6],
[3, 4, 2],
[2, 2, 6],
[7, 3, 7],
[1, 2, 8],
[2, 7, 9]]])
arr.transpose(0,2,1)
array([[[5, 9, 8, 2, 5, 3],
[1, 1, 7, 5, 2, 3],
[9, 5, 6, 3, 1, 4]],
[[8, 1, 3, 8, 7, 3],
[2, 4, 5, 6, 2, 2],
[1, 9, 9, 8, 5, 2]],
[[3, 2, 6, 6, 4, 1],
[6, 4, 4, 2, 7, 7],
[7, 7, 2, 7, 7, 2]],
[[5, 3, 2, 7, 1, 2],
[9, 4, 2, 3, 2, 7],
[6, 2, 6, 7, 8, 9]]])
注意:
多维数组是按照轴转换以上案例总共有三个轴表示为(第几个元素,行,列),转置时,元素按照转置条件的顺序,互换自己的坐标
通过转换行或者列,来实现轴的转动
意义:
把数据打乱
把外形改变
2. 全转置
arr=np.random.randint(1,10,(3,4,6))
arr.T ==== arr.transpose(2,1,0) ------>倒序
二、常见一元函数
1. expc(数组)— 计算 e^x
np.exp(数组)
2. sqrt----开方
np.sqrt(数组)
3.abs----取绝对值
np.abs(数组)
4. floor:向下取整
np.floor(数组)
5. ceil:向上取整
np.ceil(数组)
6. normal-----正太分布创建数组
arr=np.random.normal(对称轴,离散度,size)
arr=np.random.normal(6,1.8,20)
arr
array([4.3929209 , 5.0191718 , 3.51783261, 5.31396533, 4.60610421,
3.58848388, 4.68543001, 6.70596325, 5.87509674, 7.13477201,
3.69361424, 6.35012968, 3.27305504, 8.51750352, 8.27617448,
5.79646245, 7.63495035, 4.00036423, 7.96870109, 4.62883773])
7.符号函数 sign(-1,0,1)–负数为-1,0就是0,正数就是1
arr=np.random.randint(-3,3,6)
arr
array([-3, -3, 0, 0, 2, -2])
np.sign(arr)
array([-1, -1, 0, 0, 1, -1])
三、 常见的二元函数
1. maximum–比较大小,取最大值
1.标量比较大小
np.maximum(3,66)
66
2. 数组与标量比较大小
arr=np.array((1,44,3))
arr
array([ 1, 44, 3])
np.maximum(arr,3)
array([ 3, 44, 3])
数组与标量比较:
标量会与数组中的每一个数进行比较,如果标量大,标量会替换那个元素;如果标量小,元素会原样输出
2. add,subtract,multipy,devide,power
都是一对一,相同位置的元素进行加减乘除,得出一个数组
注意:
np.power(数组,数组)
如果最终得出的结果有为负数的情况,可以通过设置小数点,来改变这种情况
3. 几个计算的操作符和函数的区别
*. add +
*. subtract -
*. multipy *
*. devide /
注意:
数组与数组的进行运算时,维度必须相同
运算规则均为elementwise operator
4. np.dot函数 —与线性代数中的运算一致,与以上的元素运算完全不同
1.矩阵与矢量运算
arr=np.array([[1,2,3],[3,4,6],[1,2,1]])
arr
array([[1, 2, 3],
[3, 4, 6],
[1, 2, 1]])
a=np.array([2,1,3])
a
array([2, 1, 3])
np.dot(arr,a)
array([13, 28, 7])
np.dot(a,arr)
array([ 8, 14, 15])
注意:
矢量与矩阵运算,矢量必须转置
2. 矩阵与矩阵相乘,不满足交换律
arr@a == np.dot(arr,a) --内积
四、数据的快速挑选与基本统计函数
1.where(condition, [x, y])
其中:condition是条件,可以是数组类型,当条件为真时,为真的位置的值就会替换成x,为假时,值就会替换成y
如果没有x,y,就会返回满足条件的值所在位置的索引组成的数组
1. 当是标量时
np.where(True,6,7)
array(6)
arr=np.random.randint(2,10,(3,6))
arr
array([[4, 2, 9, 2, 7, 9],
[7, 2, 8, 2, 2, 5],
[6, 4, 2, 7, 2, 5]])
2. 二维数组不写结果时
np.where(arr>4)
(array([0, 0, 0, 1, 1, 1, 2, 2, 2], dtype=int64),
array([2, 4, 5, 0, 2, 5, 0, 3, 5], dtype=int64))
3.二维数组书写条件时
np.where([[True,False],[False,True]],[[1,2],[2,4]],[[3,5],[6,7]])
array([[1, 5],
[6, 4]])
4. 二维数组不满足时不替换原来的值
np.where(arr>4,'满足',arr)
np.where(arr>4,-100*np.ones_like(arr),arr)
扩展:
np.random.seed(672) ------使数组固定化
五、 数据拼接
1. hstack ----水平拼接
1.一维数组
np.hstack(数组1,数组2....)
在每一行的最后拼接上下一数组所对应位置的元素
注意:一维与二维不能拼接
a=np.array([1,2,3])
b=np.array([4,5,6])
np.hstack((a,b))
array([1, 2, 3, 4, 5, 6])
2.二维数组
a=np.random.randint(2,10,(3,5))
b=np.random.randint(3,15,(3,5))
[[3 4 4 6 7]
[4 3 4 7 7]
[2 8 3 2 3]]
array([[11, 5, 5, 8, 13],
[ 5, 3, 10, 6, 9],
[14, 4, 6, 8, 5]])
np.hstack((a,b))
array([[ 3, 4, 4, 6, 7, 11, 5, 5, 8, 13],
[ 4, 3, 4, 7, 7, 5, 3, 10, 6, 9],
[ 2, 8, 3, 2, 3, 14, 4, 6, 8, 5]])
a=np.array([1,2,3])
np.hstack((a,-1))
array([ 1, 2, 3, -1])
注意:
二维数组与二维数组拼接时,行数必须一致,要不会报错
一行一行的进行拼接,在对应位置上
二维数组不可以和一个标量进行批拼接,行数不满足
2. vstack
1. 一维数组
np.vstack(数组,数组...)
可以实现一维与一维的拼接,但是列数要保持一致
一维与二维可以拼接,但是列数要保持一致
一维与元素不可以拼接
二维数组也不可以拼接
a=np.array([1,2,3])
b=np.array([5,6,7])
np.vstack((a,b))
array([[1, 2, 3],
[5, 6, 7]])
2. 二维数组
a=np.random.randint(1,10,(3,4))
b=np.random.randint(1,10,(3,4))
print(a)
b
[[1 7 2 4]
[3 6 2 3]
[6 7 3 3]]
array([[2, 4, 9, 8],
[5, 4, 5, 4],
[8, 3, 2, 5]])
np.vstack((a,b))
array([[1, 7, 2, 4],
[3, 6, 2, 3],
[6, 7, 3, 3],
[2, 4, 9, 8],
[5, 4, 5, 4],
[8, 3, 2, 5]])
3. 一维数组与二维数组的拼接
a=np.array([1,2,3])
b=np.random.randint(1,10,(2,3))
print(a)
b
[1 2 3]
array([[4, 6, 1],
[2, 2, 6]])
np.vstack((a,b))
array([[1, 2, 3],
[4, 6, 1],
[2, 2, 6]])
注意:
hstack和vstack不仅仅用于两个元素的拼接,也适用多元素的拼接
3.concatenate
concatenate((a1, a2, …), axis=0, out=None)
0 —逐行按列,纵向拼接,垂直拼接,vstack
1 —逐列按行,横向拼接,水平拼接,hstack
一维数组时,axis不能为1,因为axis的值必须小于数组的维度
a=np.array([[1,2,3],[3,4,5]])
b=np.array([[3,4,5],[7,8,9]])
np.concatenate((a,b))
array([[1, 2, 3],
[3, 4, 5],
[3, 4, 5],
[7, 8, 9]])
np.concatenate((a,b),axis=1)
array([[1, 2, 3, 3, 4, 5],
[3, 4, 5, 7, 8, 9]])
4.row_stack和column_stack
1.一维数组
a=np.array([1,2,3])
b=np.array([5,6,7])
np.row_stack((a,b))
array([[1, 2, 3],
[5, 6, 7]])
np.column_stack((a,b))
array([[1, 5],
[2, 6],
[3, 7]])
2.二维数组
a=np.random.randint(1,10,(3,5))
b=np.random.randint(1,10,(4,5))
np.row_stack((a,b))
array([[3, 1, 5, 4, 9],
[1, 7, 1, 7, 8],
[1, 8, 8, 4, 9],
[1, 7, 7, 2, 2],
[6, 9, 4, 1, 1],
[1, 3, 4, 3, 4],
[5, 5, 9, 1, 1]])
a=np.random.randint(1,10,(3,5))
b=np.random.randint(1,10,(3,6))
print(a)
b
[[3 6 4 1 7]
[4 6 7 9 7]
[8 9 9 1 8]]
array([[5, 5, 3, 6, 8, 4],
[3, 7, 9, 5, 7, 6],
[3, 7, 3, 3, 6, 2]])
np.column_stack((a,b))
array([[3, 6, 4, 1, 7, 5, 5, 3, 6, 8, 4],
[4, 6, 7, 9, 7, 3, 7, 9, 5, 7, 6],
[8, 9, 9, 1, 8, 3, 7, 3, 3, 6, 2]])
注意:
进行拼接时,row_stack要保持列一致;column_stack要保持行一致
六、数据分割
数组分割时,分割后每个元素的包括的个数必须保持一致,保持均等分割
1.vsplit —在水平方向上进行分割
2.hsplit —在垂直方向上进行分割
1.一维数组的分割(只能进行hstack分割,因为只有一行)
a=np.array([1,2,3])
np.hsplit(a,3)
[array([1]), array([2]), array([3])]
2.二维数组的分割
a=np.random.randint(1,10,(3,6))
a
array([[4, 1, 6, 2, 2, 7],
[7, 8, 1, 4, 2, 4],
[7, 1, 7, 9, 4, 2]])
np.hsplit(a,2)
[array([[4, 1, 6],
[7, 8, 1],
[7, 1, 7]]), array([[2, 2, 7],
[4, 2, 4],
[9, 4, 2]])]
np.vsplit(a,3)
[array([[4, 1, 6, 2, 2, 7]]),
array([[7, 8, 1, 4, 2, 4]]),
array([[7, 1, 7, 9, 4, 2]])]
七、方差和标准差(随机变量)
函数:可以是某一种映射
随机变量:对事物的一种观察方法
x是随机变量,平均值μ=E(x)
x的方差是E(x-μ)^2
方差的性质:
1. V(x)=E(X-μ)^2
=E(X^2)-μ的平方
2.如果a和b是常数,则V(ax+b)=a^2V(x)
3.如果x1,x2,x3…是独立的,a1,a2,…是常数
V(x1+x2)=V(x1)+V(x2)
期望的公式:
离散型随机变量: E(X)=∑xkpk k从1到n
连续型随机变量: E(X)=∫x*f(x)dx x从负无穷到正无穷

802

被折叠的 条评论
为什么被折叠?



