Numpy的基本使用方法

numpy属性和创建方法

# 导入numpy模块
# 一般采用np简写
import numpy as np 
# 定义一个二维数组
array = np.array([[1,2,3],[3,4,5]])
print(array)
type(array)

[[1 2 3]
[3 4 5]]
numpy.ndarray

array.ndim#查看维度

2

array.shape# 大小形状

(2, 3)

array.size# 元素的个数

6

# 在创建时设置类型
a = np.array([2,3,4],dtype=np.int)
print(a.dtype)

int32

a = np.array([2,3,4],dtype=np.float)
print(a.dtype)

float64

# 设置32位
a = np.array([2,3,4],dtype=np.float32)
print(a.dtype)

float32

# 创建全为0的数组
a = np.zeros((3,4),dtype=np.int)
a

array([[0., 0., 0., 0.],
[0., 0., 0., 0.],
[0., 0., 0., 0.]])

# 创建全为1的数组
a = np.ones((3,3),dtype=np.int)
a

array([[1, 1, 1],
[1, 1, 1],
[1, 1, 1]])

# 创建全为空的
a = np.empty((3,4))
a

array([[0., 0., 0., 0.],
[0., 0., 0., 0.],
[0., 0., 0., 0.]])

# 创建连续的,创建10到20步长为2的
a = np.arange(10,20,2)
a

array([10, 12, 14, 16, 18])

# 改变a的形状
a = np.arange(12)
a.reshape(3,4)

array([[ 0, 1, 2, 3],
[ 4, 5, 6, 7],
[ 8, 9, 10, 11]])

# 1到10 分割成20个内容
a = np.linspace(1,10,20)
a

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. ])

Numpy基本运算和常用方法

# 俩个数组
a = np.array([1,2,3,4])
b = np.array([5,6,7,8])
# 数组之间的加减乘除
# 相加
a + b

array([ 6, 8, 10, 12])

# 相减
a - b

array([-4, -4, -4, -4])

# 相乘
a * b 

array([ 5, 12, 21, 32])

# 求幂
a ** b

array([ 1, 64, 2187, 65536], dtype=int32)

  • 数组间的加减乘除是和相同位置的元素进行计算
# 数组与数字间的加减乘除
a + 4

array([ 3, 6, 9, 12])

a - 4

array([-3, -2, -1, 0])

a * 3

array([ 3, 6, 9, 12])

a / 4

array([0.25, 0.5 , 0.75, 1. ])

  • 数组与数字的加减乘除是数字和数组中的每个元素的计算
# 数组的逻辑运算
a > 3

array([False, False, False, True])

a == 3

array([False, False, True, False])

#求和的方法
np.sum(a)

10

#求最小值
np.min(a)

1

# 最大值
np.max(a)

4

# 生成随机值
c = np.random.random((2,4))
c

array([[0.23305925, 0.32964137, 0.47588554, 0.0449932 ],
[0.58350407, 0.32060233, 0.28159512, 0.1468061 ]])

# axis为1的时候,求每一行的和
np.sum(c,axis=1)

array([1.08357936, 1.33250763])

# axis为0的时候,求每一列的和
np.sum(c,axis=0)

array([0.81656333, 0.6502437 , 0.75748067, 0.1917993 ])

# 求平均值
np.average(a)

2.5

# 求中位数
np.median(c)

0.3010987291013179

# 累加的操作,逐个累加
np.cumsum(a)

array([ 1, 3, 6, 10], dtype=int32)

# 转置
d = a.reshape(2,2)
d

array([[1, 2],
[3, 4]])

d.T

array([[1, 3],
[2, 4]])

# 也是转置
np.transpose(d)

array([[1, 3],
[2, 4]])

Numpy的索引和数据的选择

a = np.arange(10)
a

array([0, 1, 2, 3, 4, 5, 6, 7, 8, 9])

# 取出第三个数
a[2]

2

# 取二维数组的数
a.reshape(2,5)

array([[0, 1, 2, 3, 4],
[5, 6, 7, 8, 9]])

# 现在[1]代表了一行
b[1]

array([5, 6, 7, 8, 9])

# 取出5
b[1][0]

5

# 第一个代表了第几行,第二个数字代表了第几列,行列都是从0开始计算
b[1,0]

5

# 取出第二行,第三四五列
b[1,2:]

array([7, 8, 9])

# 第二行,第一二列
b[1,0:2]

array([5, 6])

# 选出b中大于五的
b[b>5]

array([6, 7, 8, 9]) ​

Numpy的合并、分割与复制

a = np.array([1,2,3])
b = np.array([4,5,6])
# 垂直合并  上下合并
np.vstack((a,b))

array([[1, 2, 3],
[4, 5, 6]])

# 水平合并  左右合并
np.hstack((a,b))

array([1, 2, 3, 4, 5, 6])

# 分割操作
c = np.arange(12).reshape(3,4)
c

array([[ 0, 1, 2, 3],
[ 4, 5, 6, 7],
[ 8, 9, 10, 11]])

# 垂直分割 分割成俩分
np.split(c,2,axis=1)

[array([[0, 1],
[4, 5],
[8, 9]]), array([[ 2, 3],
[ 6, 7],
[10, 11]])]

# 水平分割 分成三份
np.split(c,3,axis=0)

[array([[0, 1, 2, 3]]), array([[4, 5, 6, 7]]), array([[ 8, 9, 10,
11]])]

# 不等量分割
np.array_split(c,2,axis=0)

[array([[0, 1, 2, 3],
[4, 5, 6, 7]]), array([[ 8, 9, 10, 11]])]

# 垂直分割
np.hsplit(c,2)

[array([[0, 1],
[4, 5],
[8, 9]]), array([[ 2, 3],
[ 6, 7],
[10, 11]])]

#水平分割
np.vsplit(c,3)

[array([[0, 1, 2, 3]]), array([[4, 5, 6, 7]]), array([[ 8, 9, 10,
11]])]

# 复制
a = np.array([1,2,3,4])
b = a
c = b
a[1] = 100
b

array([ 1, 100, 3, 4])

c

array([ 1, 100, 3, 4])

  • 只改了一个a,但是b、c都变了 本质上引用了内存地址,改了一个会全变
# 复制操作
b = a.copy()
b

array([ 1, 100, 3, 4])

a[1] = 1
b

array([ 1, 100, 3, 4])

  • b没有被更改,内存地址不一样了

​Numpy数组元素的添加和删除

a = np.array([[1,2,3],[4,5,6]])
a

array([[1, 2, 3],
[4, 5, 6]])

# 追加
np.append(a,[7,8,9])

array([1, 2, 3, 4, 5, 6, 7, 8, 9])

  • 变成了一维数组
# 追加行,注意:追加的数据也是二维的
np.append(a,[[7,8,9]],axis=0)

array([[1, 2, 3],
[4, 5, 6],
[7, 8, 9]])

# 追加列 
np.append(a,[[7,8],[8,9]],axis=1)

array([[1, 2, 3, 7, 8],
[4, 5, 6, 8, 9]])

# 插入操作
a = np.array([[1,2],[3,4],[5,6]])
a
array([[1, 2],
       [3, 4],
       [5, 6]])
# 插入操作
np.insert(a,3,[7,8])

array([1, 2, 3, 7, 8, 4, 5, 6])

  • 转换成了一维数组
# 二维插入,插入行
np.insert(a,1,[[8,9]],axis=0)

array([[1, 2],
[8, 9],
[3, 4],
[5, 6]])

# 二维插入 插入列 会将每一个自动扩张成对应的行数 
np.insert(a,1,[[1],[2],[3]],axis=1)

array([[1, 1, 2, 3, 2],
[3, 1, 2, 3, 4],
[5, 1, 2, 3, 6]])

Numpy删除和去重

a = np.arange(12).reshape(3,4)
a

array([[ 0, 1, 2, 3],
[ 4, 5, 6, 7],
[ 8, 9, 10, 11]])

# 删除变成了一维
np.delete(a,5)

array([ 0, 1, 2, 3, 4, 6, 7, 8, 9, 10, 11])

# 删除第二列
np.delete(a,1,axis=1)

array([[ 0, 2, 3],
[ 4, 6, 7],
[ 8, 10, 11]])

# 删除第二行
np.delete(a,1,axis=0) 

array([[ 0, 1, 2, 3],
[ 8, 9, 10, 11]])

# 删除多个
a = np.array([1,2,3,4,5,6,7,8,9,10])
np.delete(a,np.s_[3:6])

array([ 1, 2, 3, 7, 8, 9, 10])

去重
a = np.array([5,2,6,2,7,5,6,8,2,9])
a

array([5, 2, 6, 2, 7, 5, 6, 8, 2, 9])

#去重
np.unique(a)

array([2, 5, 6, 7, 8, 9])

# 返回去重的索引值
np.unique(a,return_index=True)

(array([2, 5, 6, 7, 8, 9]), array([1, 0, 2, 4, 7, 9], dtype=int64))

# 返回每一个结果都数量
np.unique(a,return_counts=True)

(array([2, 5, 6, 7, 8, 9]), array([3, 2, 2, 1, 1, 1], dtype=int64))

Numpy字符串相关的处理

# 拼接一维的
np.char.add(['hello'],['world'])

array([‘helloworld’], dtype=’<U10’)

# 拼接多维的
# 按照顺序依次拼接
np.char.add(['hello','hi'],['zs','ls'])

array([‘hellozs’, ‘hils’], dtype=’<U7’)

# 重复生成
np.char.multiply("对不起",10)

array(‘对不起对不起对不起对不起对不起对不起对不起对不起对不起对不起’, dtype=’<U30’)

# 字符串居中的操作
np.char.center('nihao',30)

array(’ nihao ‘, dtype=’<U30’)

 # 字符串的分割操作
np.char.split("www.bai.com",".")

array(list([‘www’, ‘bai’, ‘com’]), dtype=object)

# 换行分割
np.char.splitlines("i\nlove\nyou")

array(list([‘i’, ‘love’, ‘you’]), dtype=object)

# 去除开头和结尾的特定字符,中间的不会去除
np.char.strip("     l  a  o    ")

array(‘l a o’, dtype=’<U16’)

# 拼接字符串
np.char.join("/","laochen")

array(‘l/a/o/c/h/e/n’, dtype=’<U13’)

# 替换
np.char.replace("lao cheng","cheng","gao")

array(‘lao gao’, dtype=’<U7’)

​Numpy数学函数

# 存储度数的数组
a = np.array([0,30,35,60,90])
a

array([ 0, 30, 35, 60, 90])

# 根据度数转化为正弦值
np.sin(a*np.pi/180)

array([0. , 0.5 , 0.57357644, 0.8660254 , 1. ])

# 余弦值
np.cos(a*np.pi/180)

array([1.00000000e+00, 8.66025404e-01, 8.19152044e-01, 5.00000000e-01,
6.12323400e-17])

# 正切值
np.tan(a*np.pi/180)

array([0.00000000e+00, 5.77350269e-01, 7.00207538e-01, 1.73205081e+00,
1.63312394e+16])

# 舍入函数
# 四舍五入  俩个参数   第一个是数组  第二个是舍入的位数
a = np.array([1.0,5.55,2.678,4.123,9.53])
# 保留一个小数点
np.around(a,1)

array([1. , 5.6, 2.7, 4.1, 9.5])

# 向下取整  即只取整数
np.floor(a)

array([1., 5., 2., 4., 9.])

# 向上取整,整数向上取整还是自己
np.ceil(a)

array([ 1., 6., 3., 5., 10.])

Numpy统计函数

 a = np.array([[3,7,5],[8,4,3],[2,4,9]]) 

array([[3, 7, 5],
[8, 4, 3],
[2, 4, 9]])

# 获取行的最小值
np.amin(a,1)

array([3, 3, 2])

# 获取列的最小值
np.amin(a,0)

array([2, 4, 3])

# 获取行的最大值
np.amax(a,1)

array([7, 8, 9])

# 获取列的最大值
np.amax(a,0)

array([8, 7, 9])

# 最大值与最小值的差值 全部元素范围
np.ptp(a)

7

# 按轴计算 行
np.ptp(a,1)

array([4, 5, 7])

# 按轴计算 列
np.ptp(a,0)

array([6, 3, 6])

# 百分位数 一个元素在一个元素组里的百分位数
a = np.array([[10,7,4],[3,2,1]])
a

array([[10, 7, 4],
[ 3, 2, 1]])

# 中位数  50的意思的百分之50
np.percentile(a,50)

3.5

# 按照轴进行计算中位数
np.percentile(a,50,1)

array([7., 2.])

# 按照轴计算列的中位数
np.percentile(a,50,0)

array([6.5, 4.5, 2.5])

# 直接计算中位数的方法
np.median(a)

3.5

# 行
np.median(a,1)

array([7., 2.])

# 列
np.median(a,0)

array([6.5, 4.5, 2.5])

a = np.array([[1,2,3],[3,4,5],[4,5,6]])
a

array([[1, 2, 3],
[3, 4, 5],
[4, 5, 6]])

# 算数平均值
np.mean(a)

3.6666666666666665

 # 按轴计算 行
np.mean(a,1)

array([2., 4., 5.])

# 按轴计算 列
np.mean(a,0)

array([2.66666667, 3.66666667, 4.66666667])

# 标准差
np.std(a)

1.4907119849998598

# 方差
np.var(a)

2.2222222222222223

Numpy的IO操作

a = np.array([1,2,3,4,5])
a

array([1, 2, 3, 4, 5])

# 保存数据到文件
np.save("outfile.npy",a)
# 读取数据
np.load("outfile.npy")

array([1, 2, 3, 4, 5])

# 将多个数组保存到文件中
a = np.array([[1,2,3],[4,5,6]])
b = np.array([2,4,7])
c = np.arange(1,2,4)
np.savez("hi.npz",a,b,c)
# 读取
d = np.load("hi.npz")
d

<numpy.lib.npyio.NpzFile at 0x12b9cdcfcc8>

d.files

[‘arr_0’, ‘arr_1’, ‘arr_2’]

d['arr_0']

array([[1, 2, 3],
[4, 5, 6]])

# 在存入的时候取名字
np.savez("hello.npz",a=a,b=b,c=c)
# 读取b的内容
np.load('hello.npz')['b']

array([2, 4, 7])

# 以文本的形式存放数据
a = np.array([1,2,3,4,5,6])
np.savetxt("out.txt",a)
# 读取
p = np.loadtxt("out.txt")
p

array([1., 2., 3., 4., 5., 6.])

  • 0
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值