Numpy初学

本文介绍了Numpy的基本操作,包括数据创建、自动创建数组如linspace、arange、randint,一维和二维数组的重塑、ravel函数、数据网格化。还详细讲解了特殊数组的创建、类型转换、并行计算、索引、切片、选区、布尔值索引、花式索引、转置矩阵和矩阵相乘等核心概念。
摘要由CSDN通过智能技术生成

Numpy初学

一、数据的创建

** 1. 手动创建 **

import numpy as np
arr_1=np.array([1,2,3])
arr_1

一维数组可直接与标量相乘

arr_a*3
array([3, 6, 9])

** 注:**
创建数组时,其元素必须有相同的结构,尽量定义为浮点型

 arr_b=np.array((1,2),dtype=np.float64)
 arr_b
 array([1., 2.])

** 2. dtype关键字 **
用作查询数组的类型
既可以作为方法,又可以作为参数关键字

** 3. shape **
用作查询数组的外形

一位数组的数组外形
arr_b=np.array((1,2,3,4))
arr_c.shape
(3,)
二维数组的数组外形
arr_b=np.array([[1,2,3],[4,5,6]])
arr_b.shape
(2, 3)
2代表行 3代表列

二、自动创建数组

1. linspace函数

np.linspace(start,stop,num=50,endpoint=True)
特点:
默认包括结束值。如果endpoint=false ,不包括结束值

arr_1=np.linspace(1,10,20)
arr_1
array([ 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.        ])

2. arange函数

arange([start,] stop[, step,], dtype=None)
特点:
默认前闭后开,不包括结束值
step表示步长

arr_2=np.arange(1,10,2)
arr_2
array([1, 3, 5, 7, 9])

3. randint函数

randint(low, high=None, size=None, dtype=‘l’)
ar1=np.random.randint(‘开始数字’,‘结束数字’,‘几个数字’)#一维数组
ar2=np.random.randint(‘开始数字’,‘结束数字’,(‘行数’,‘列数’))
用array_like来赋值
ar1[1:3,1]=[[0,1,2],[3,4,5]]
特点:
前闭后开,size可以创建多种维度的数组

arr_3=np.random.randint(1,10,(2,3))
arr_3
array([[6, 8, 7],
    [4, 2, 8]])

4. 一维数组与二维数组的创建

1. reshape

np.reshape(a, newshape, order=‘C’)

arr_1=np.random.randint(1,10,6)
(array([3, 8, 1, 3, 9, 3])
arr_1.reshape(2,3)

** 注意:**
reshape中书写的行和列相乘必须和转换之前的个数一致,要不会报错

2. ravel函数

转换为一维数组
np.ravel(a, order=‘C’)

arr_2=np.random.randint(1,10,(2,3))
array([[3, 7, 4],
        [5, 5, 9]]))
arr_2.ravel()
np.ravel(arr_2)
array([3, 7, 4, 5, 5, 9])
上述两种方法均可以转换
一个是作为属性
一个是作为函数

3. 数据的网格化

np.meshgrid(*xi, **kwargs)

x=np.linspace(1,10,5)
y=np.linspace(2,16,5)
x,y
(array([ 1.  ,  3.25,  5.5 ,  7.75, 10.  ]),
 array([ 2. ,  5.5,  9. , 12.5, 16. ]))
 np.meshgrid(x,y)
 [array([[ 1.  ,  3.25,  5.5 ,  7.75, 10.  ],
        [ 1.  ,  3.25,  5.5 ,  7.75, 10.  ],
        [ 1.  ,  3.25,  5.5 ,  7.75, 10.  ],
        [ 1.  ,  3.25,  5.5 ,  7.75, 10.  ],
        [ 1.  ,  3.25,  5.5 ,  7.75, 10.  ]]),
 array([[ 2. ,  2. ,  2. ,  2. ,  2. ],
        [ 5.5,  5.5,  5.5,  5.5,  5.5],
        [ 9. ,  9. ,  9. ,  9. ,  9. ],
        [12.5, 12.5, 12.5, 12.5, 12.5],
        [16. , 16. , 16. , 16. , 16. ]])]

实现数据更精细的划分

三、 特殊数组的创建与应用

1. 0数组的创建

zeros(shape, dtype=float, order='C')
b=np.zeros(4)
b
array([0., 0., 0., 0.])
a=np.zeros((2,3))
a
array([[0., 0., 0.],
       [0., 0., 0.]])
       

2. 1数组的创建

同理

a=np.ones(3)
a
array([1., 1., 1.])

3.空数组的创建–空数组不能为空,可装载数据

a=np.empty((2,10000))
empty括号中书写行和列
a
array([[1.38677544e-311, 1.38681424e-311, 2.12199579e-314, ...,
        0.00000000e+000, 0.00000000e+000, 0.00000000e+000],
       [0.00000000e+000, 0.00000000e+000, 0.00000000e+000, ...,
        0.00000000e+000, 0.00000000e+000, 0.00000000e+000]])

真空数组的创建

a=np.array([])

4.单位矩阵的创建–只有二维

a=np.identity(个数)
a=np.identity(3)
a
array([[1., 0., 0.],
       [0., 1., 0.],
       [0., 0., 1.]])

四、类似矩阵的创建

1. zeros_like

b=np.linspace(1,10,5)
a=np.zeros_likes(b)

2.empty_like

a=np.linspace(1,10,2)
b=np.empty_likes(a)

3.ones_like

a=np.linspace(1,10,4)
b=np.ones_like(a)

五、类型转换

numpy的类型
int8,int16,int32,int64
float16,float32,float64,float128
complex64,complex128,complex256
bool,object,string_,unicode

a=np.astype('int')
a.dtype='int'  ×  不能转

六、数组的并行计算(批次量运算,向量性运算)

a=np.random.randint(1,10,5)
b=np.random.randint(2,28,5)
a,b
(array([4, 9, 4, 9, 9]), array([19, 10, 13, 27,  8]))
a+b
array([23, 19, 17, 36, 17])

** 注意:**
相加的两个数组的个数必须一致
一对一,相同位置的相加按照标量计算
二维数组的并行计算等同于标量计算

七、索引 切片 选区

1.索引

a=np.random.randint(1,10,5)
a[0]

2. 选区

a=np.random.randint(1,10,5)
a[1:4]
精准定位赋值
ar1[3:4][4:4]=1000

3. 切片

a=np.random.randint(1,10,5)
b=a[1:4]

注意:
切片与选区的区别:
切片是选区选择完之后赋值给一个新的变量
而选区仅仅是在原数组上选择一块区域
切片改变,原数组改变,可以通过copy函数来避开这一特性

八、源数据的保护

1. 广播赋值

arr=np.random.randint(1,10,(2,3))
arr[1:,1:]='12'

2. 数组类似赋值–array_like

arr=np.random.randint(1,10,(6,4))
arr[1:3,1:]=[[0,1,2],[3,4,5]]

3. 精确定位赋值

arr=np.random.randint(1,10,(2,3))
arr[1,2]=-100

九、布尔值当索引

1. 一维数组

arr=np.random.randint(1,10,5)
arr[arr>3]
arr[(arr>0)&(arr<8)]

2.二维数组

arr=np.random.randint(1,10,(2,4))
arr[(arr>3)&(arr<6)]
arr[1]>5     -------->把第一行》5的数据取出来
arr[:,arr[1]>5]---------->把》5的列为true取出来

十、花式索引—索引必须是二维

arr=np.random.randint(1,10,(6,5))
arr[[3]]   ==arr[[1],:]
arr[[2,4]]  ---->取任意的行数   ==arr[[1,2],:]
arr[:,[2,3,4]]----->取任意的列数
arr[[1,3],[2,4]]---->选取的行的个数与列数必须一致1--2,3--4
arr[[1,2,3]][:,[2,4,1]]   ---先选取行数,在选取列数
arr[np.ix_([1,2,3],[2,4,1])]

十一、转置矩阵

行和列数一直时,根据对角线调换位置
不一致时,第一列转为第一行,第二列转为第二行

十二、矩阵相乘

a是3行5列
b是5行2列
a*b==>c[1][1]==>a[1][1]*b[1][1]+a[1][2]*b[2][1]…以此列推
注意:
两矩阵相乘a的行数必须与b的列数一致才可以相乘

np.dot(a,b)----------------->numpy自带的函数
评论 13
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值