Numpy基础(2)

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)=∑xk
pk k从1到n
连续型随机变量: E(X)=∫x*f(x)dx x从负无穷到正无穷

评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值