Numpy常用操作

广播机制

import numpy as np 
b = np.array([1,2,3,4,5])
c = 1+ b
c
array([2, 3, 4, 5, 6])
d = 2*b
b
array([1, 2, 3, 4, 5])

一 数组的生成方式

列表方式

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

内置方法 默认浮点数

np.zeros(5)
array([0., 0., 0., 0., 0.])
np.ones(5)
array([1., 1., 1., 1., 1.])

指定数据类型 datype

np.ones(5, dtype='int')
array([1, 1, 1, 1, 1])
np.ones(5, dtype='bool')
array([ True,  True,  True,  True,  True])

指定填充值 fill

a = np.ones(5)
a.fill(5)
a
# fill中的数据和原始数据类型相同
array([5., 5., 5., 5., 5.])
a.fill(3.5)
a
# 强制转化为原始数据类型
array([3.5, 3.5, 3.5, 3.5, 3.5])
# 采用 astype 进行转换a.astype('floate')
a = [1,2,3,4,5,6]
a = np.array(a)
a = a.astype('float')
a
array([1., 2., 3., 4., 5., 6.])

生成等差数列

a = np.arange(1, 10)
a
array([1, 2, 3, 4, 5, 6, 7, 8, 9])
a = np.arange(1, 10, 2)
a
array([1, 3, 5, 7, 9])
a = np.linspace(1,10, 11)
a
array([ 1. ,  1.9,  2.8,  3.7,  4.6,  5.5,  6.4,  7.3,  8.2,  9.1, 10. ])

生成随机数组

a = np.random.rand(10)
a
array([0.13947687, 0.65462116, 0.81451741, 0.55057774, 0.41840527,
       0.17633818, 0.52725956, 0.60188694, 0.11878766, 0.59086905])
a = np.random.randint(1,10)
a
#随机生成一个
8
a = np.random.randn(10)
a
# 随机正态分布
array([ 0.8226025 ,  1.28407151,  0.58721396, -0.51081168, -1.87262738,
       -0.80944086, -0.89137566, -0.56553122,  0.72389785,  1.1288713 ])
a = np.random.randint(1, 100, 10)
a
array([38, 84, 67, 92, 90, 42, 33, 89, 79, 41])

查看类型

type(a) # 数组类型
numpy.ndarray
a.dtype  #元素类型
dtype('int64')
a.shape # 数组形状
(10,)
a.size #元素数量
10
a.ndim # 纬度查看
1

索引与切片

a
array([38, 84, 67, 92, 90, 42, 33, 89, 79, 41])
a[0]
38
a[0]=50
a
array([50, 84, 67, 92, 90, 42, 33, 89, 79, 41])
a[2:6] # 左闭右开
array([67, 92, 90, 42])
a[2:-3]
array([67, 92, 90, 42, 33])
a[-6: 6]
array([90, 42])
a[2:]
array([67, 92, 90, 42, 33, 89, 79, 41])
a[-4:]
array([33, 89, 79, 41])
a[::2]
array([50, 67, 90, 33, 79])
累计票房
a = [21000, 21030, 21040, 21100, 21130, 21160] # 连续六日票房 计算各日票房 错位相减
a = np.array(a)
b = a[:-1]
c = a[1:]
b, c
(array([21000, 21030, 21040, 21100, 21130]),
 array([21030, 21040, 21100, 21130, 21160]))
c-b 
array([30, 10, 60, 30, 30])

多维数组

a = np.array([[1,2,3,4], [4,5,6,7], [2,3,4,1]])
a
array([[1, 2, 3, 4],
       [4, 5, 6, 7],
       [2, 3, 4, 1]])
a.size , a.shape, a.ndim
(12, (3, 4), 2)
a[1,2] # 一行三列
6
a[1, 2]=30 # 索引修改
a
array([[ 1,  2,  3,  4],
       [ 4,  5, 30,  7],
       [ 2,  3,  4,  1]])
a[1] #行索引
array([ 4,  5, 30,  7])
a[:,1] # 第二列
array([2, 5, 3])
a[0:2, 1:3] # 0到1行 一到三列
array([[ 2,  3],
       [ 5, 30]])
a[1, 1:3] # 得到的是一维数组
array([ 5, 30])
a[1:2, 1:3]  # 得到的是二维数组
array([[ 5, 30]])
a[:,::2] # 奇数列
array([[ 1,  3],
       [ 4, 30],
       [ 2,  4]])
### 切片使用引用机制 并未分配新的内存空间 对a的索引的或切片的值修改 会使得原数组的值被修改
###  采用浅拷贝会或深拷贝的方法解决
b=a
b
array([[ 1,  2,  3,  4],
       [ 4,  5, 30,  7],
       [ 2,  3,  4,  1]])
b[2:,3:]=88
a
array([[ 1,  2,  3,  4],
       [ 4,  5, 30,  7],
       [ 2,  3,  4, 88]])
b = a.copy() # 为b重新申请内存
a
array([[ 1,  2,  3,  4],
       [ 4,  5, 30,  7],
       [ 2,  3,  4, 88]])
b[2:,3:]=99 
a
# 并未影响a的值
array([[ 1,  2,  3,  4],
       [ 4,  5, 30,  7],
       [ 2,  3,  4, 88]])

花式索引 返回一个对象的复制而非引用

index = [0,3, -1] #
a = np.arange(0, 100, 20)
a
array([ 0, 20, 40, 60, 80])
a[index]
array([ 0, 60, 80])
mask = np.array([1,0,3,0,1], dtype='bool')
mask
array([ True, False,  True, False,  True])
a[mask]
array([ 0, 40, 80])
## 二维索引
a = np.array([[1,2,22,4,5], [1,23,3,12,5], [1,61,3,4,5], [1,11,3,4,5], [1,2,3,4,5]])
a
array([[ 1,  2, 22,  4,  5],
       [ 1, 23,  3, 12,  5],
       [ 1, 61,  3,  4,  5],
       [ 1, 11,  3,  4,  5],
       [ 1,  2,  3,  4,  5]])
mask = [(0,1,3), (0,1,2)]
a[mask]
/Users/lama/miniconda3/envs/Sci/lib/python3.6/site-packages/ipykernel_launcher.py:2: FutureWarning: Using a non-tuple sequence for multidimensional indexing is deprecated; use `arr[tuple(seq)]` instead of `arr[seq]`. In the future this will be interpreted as an array index, `arr[np.array(seq)]`, which will result either in an error or a different result.
  





array([ 1, 23,  3])
a[2:, [1,2,3]]
array([[61,  3,  4],
       [11,  3,  4],
       [ 2,  3,  4]])
mask = np.array([1,0,1,1,0], dtype=bool)
a[mask, 1]
array([ 2, 61, 11])
### 不完全索
a[:3]
array([[ 1,  2, 22,  4,  5],
       [ 1, 23,  3, 12,  5],
       [ 1, 61,  3,  4,  5]])

where 语句判断 条件

a = np.array([1,0,10,12, 11])
a>10
array([False, False, False,  True,  True])
a[a>10]
array([12, 11])
np.where(a>10) # 返回大于10元素的位置
(array([3, 4]),)
a[np.where(a>10)]
array([12, 11])

数据类型转换

np.array([1,-2, 3,4.5], dtype=float)
array([ 1. , -2. ,  3. ,  4.5])
asarray(obj, type)
a = np.array([1,2,3,4,5,6])
b = np.asarray(a, dtype=float)
b
array([1., 2., 3., 4., 5., 6.])
b[0]=0.3
b, a
(array([0.3, 2. , 3. , 4. , 5. , 6. ]), array([1, 2, 3, 4, 5, 6]))
astype(type)
a.astype(float) # 类似于上block 返回一个新的数组
array([1., 2., 3., 4., 5., 6.])

数组常用操作

a = ['a','b','c','d','e','f','g','h','i','j','k'] # 电影名称
b = np.array([1000203, 453229, 3992039, 340845, 123432, 34895,456098, 456321, 458965, 1209321, 380495]) # 评分人数
c = np.array([7,8,6,6.5,8,9,7.7,8,9,8,7.5])  # 电影评分
d = np.array([130,140, 150, 145, 135, 143, 135,129, 144, 150, 134]) # 电影时长
np.sort(b) # 按照评分人数排
array([  34895,  123432,  340845,  380495,  453229,  456098,  456321,
        458965, 1000203, 1209321, 3992039])
## argsort 返回从小到大排序在数组中的位置
order = np.argsort(b)
order
order[0] # 获取到评分人数最少的
5
a[order[0]] # 获取到相应的电影名称
'f'
# 求和
np.sum(b)
b.sum()
8905843
np.max(b) # 求最大
b.max()
3992039
np.min(b) # 求最小
b.min()
34895
np.mean(b) # 求均值
b.mean()
809622.0909090909
b.std() # 求标准差
np.std(b)
1057380.8115000227
np.cov(b, c) # 求相关系数矩阵
array([[ 1.2298596e+12, -6.6570125e+05],
       [-6.6570125e+05,  8.6000000e-01]])

多维数组操作

数组形状
a = np.array([1,2,3,4,5,6,7,8])
a.shape=2, 4   # 该方法修改原来的数组
a
array([[1, 2, 3, 4],
       [5, 6, 7, 8]])
# 与之对应的 reshape 不会修改原来的数组 返回一个新的数组
b = a.reshape(4, 2)
b
array([[1, 2],
       [3, 4],
       [5, 6],
       [7, 8]])
a # a本身并未被修改
array([[1, 2, 3, 4],
       [5, 6, 7, 8]])
a.T # a的转置 保持原来的值
array([[1, 5],
       [2, 6],
       [3, 7],
       [4, 8]])
a.transpose()
array([[1, 5],
       [2, 6],
       [3, 7],
       [4, 8]])

数组的连接

# np.concatenate((a,b), axis=0)  0表示沿y轴进拼接 1代表沿x轴
x = np.array([[1,2,3], [4,5,7]])
y = np.array([[1,2,3], [4,5,7]])
z = np.concatenate((x,y), axis=0)
z
array([[1, 2, 3],
       [4, 5, 7],
       [1, 2, 3],
       [4, 5, 7]])
z.shape  # (4, 3) = (row, col)
(4, 3)
z = np.concatenate((x,y), axis=1)
z
array([[1, 2, 3, 1, 2, 3],
       [4, 5, 7, 4, 5, 7]])
z.shape  # (2, 6) = (row, col)
(2, 6)
z = np.array((x,y)) # 这种方式变成了一个三维数组
z
array([[[1, 2, 3],
        [4, 5, 7]],

       [[1, 2, 3],
        [4, 5, 7]]])
# vstack hstack dsatck
np.vstack((x, y))
array([[1, 2, 3],
       [4, 5, 7],
       [1, 2, 3],
       [4, 5, 7]])
np.hstack((x, y))
array([[1, 2, 3, 1, 2, 3],
       [4, 5, 7, 4, 5, 7]])
z = np.dstack((x,y))
z
array([[[1, 1],
        [2, 2],
        [3, 3]],

       [[4, 4],
        [5, 5],
        [7, 7]]])
z.shape   # (2, 3, 2)=(col, row, channel)
(2, 3, 2)

其他内置函数

a = np.array([-1,1,2,-3])
a
array([-1,  1,  2, -3])
np.abs(a)   # 绝对值
array([1, 1, 2, 3])
np.exp(a)  #  指数
array([0.36787944, 2.71828183, 7.3890561 , 0.04978707])
np.median(a) # 中值
0.0
np.cumsum(a) # 累积和
array([-1,  0,  2, -1])
# 更多方法可查询官网
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值