数据科学包

numpy

numpy基本概念

numpy 是快速、方便的科学计算基础库(主要是对数值的计算,多维数组的运算)。Python的一种开源的数值计算扩展。这种工具可用来存储和处理大型矩阵。

●轴的理解(axis):0轴, 1轴, 2轴
一维数组:[1,2,3,4,5] ----> 0轴
二维数组:[[1,2,3,4,5], [1,2,3,4,5]] ----> 0轴,1轴
在这里插入图片描述三维数组:[[[1,2],[3,4],[5,6]], [[1,2],[3,4],[5,6]]] ----> 0轴,1轴,2轴
在这里插入图片描述

创建数组

import numpy as np

a = np.array([[1,2,3],[4,5,6]])
b = np.arange(10,20,2)
c = np.arange(12).reshape((3,4))
d = np.linspace(1,10,20)
e = np.linspace(1,10,6).reshape(2,3)

基本操作

【加减】

import numpy as np
a = np.array([10,20,30,40])
b = np.arange(4)
print(a,b)
c = a-b
d = a+b
print(c)
print(d)
*************************************************
[10 20 30 40] [0 1 2 3]
[10 19 28 37]
[10 21 32 43]

【乘,矩阵相乘】

a = np.array([[1,1],
             [0,1]])
b = np.arange(4).reshape(2,2)
c = a*b          #矩阵相乘,对应位置相乘
c_dot = np.dot(a,b)    #矩阵的乘法
print(c)
print(c_dot)
c_dot_2 = a.dot(b)
print(c_dot_2)     #矩阵相乘的另一种写法
********************************************************
[[0 1]
 [0 3]]
[[2 4]
 [2 3]]
[[2 4]
 [2 3]]

【求和,最大最小值】

a = np.random.random((2,4))    #随机生成一个矩阵
print(a)
print(np.sum(a))      #所有数相加的和
print(np.min(a))      #最小值
print(np.max(a))      #最大值
print(np.sum(a,axis=1))   #axis=1每一行的和,axis=0每一列中的和
print(np.max(a,axis=0))   #每一列中的最大值
*************************************************************
[[0.18748309 0.21511821 0.94821479 0.86264897]
 [0.61484458 0.96195364 0.32977898 0.57563758]]
4.695679836849307
0.18748309295018062
0.9619536361252737
[2.21346506 2.48221478]
[0.61484458 0.96195364 0.94821479 0.86264897]

【其他基本操作】

a = np.arange(2,14).reshape((3,4))
print(a)
print(np.argmin(a))    #打印出最小值的索引
print(np.argmax(a))    #打印出最大值的索引
print(np.mean(a))      #打印出平均值
print(np.median(a))    #打印出中位数
print(np.cumsum(a))    #打印出累加和
print(np.diff(a))      #打印出相邻两个数的差值
print(np.sort(a))      #逐行排序,从小到大
print(np.transpose(a)) #转置矩阵
print(a.T)             #转置矩阵
print((a.T).dot(a))
print(np.clip(a,5,9))  #把矩阵内小于5的数变为5,大于9的数变为9
*******************************************************************
[[ 2  3  4  5]
 [ 6  7  8  9]
 [10 11 12 13]]
0
11
7.5
7.5
[ 2  5  9 14 20 27 35 44 54 65 77 90]
[[1 1 1]
 [1 1 1]
 [1 1 1]]
[[ 2  3  4  5]
 [ 6  7  8  9]
 [10 11 12 13]]
[[ 2  6 10]
 [ 3  7 11]
 [ 4  8 12]
 [ 5  9 13]]
[[ 2  6 10]
 [ 3  7 11]
 [ 4  8 12]
 [ 5  9 13]]
[[140 158 176 194]
 [158 179 200 221]
 [176 200 224 248]
 [194 221 248 275]]
[[5 5 5 5]
 [6 7 8 9]
 [9 9 9 9]]

索引和切片

ndarray 对象的内容可以通过索引或切片来访问和修改,与 Python 中 list 的切片操作一样。

【索引】

a = np.arange(3,15).reshape((3,4))
print(a)
print(a[2])
print(a[1][2])
print(a[1,2])
print(a[:,:])        #索引访问
print(a[1,:])
print(a[1,1:3])
for row in a:
    print(row)      #打印出每一行的数
    
for column in a.T:
    print(column)   #打印出每一列的数
    
print(a.flatten())    
for item in a.flat:
    print(item)        #返回所有的数
****************************************************************
[[ 3  4  5  6]
 [ 7  8  9 10]
 [11 12 13 14]]
[11 12 13 14]
9
9
[[ 3  4  5  6]
 [ 7  8  9 10]
 [11 12 13 14]]
[ 7  8  9 10]
[8 9]
#每一行
[3 4 5 6]
[ 7  8  9 10]
[11 12 13 14]
#每一列
[ 3  7 11]
[ 4  8 12]
[ 5  9 13]
[ 6 10 14]
#所有数
[ 3  4  5  6  7  8  9 10 11 12 13 14]
3
4
5
6
7
8
9
10
11
12
13
14

【切片】
ndarray 数组可以基于 0 - n 的下标进行索引,切片对象可以通过内置的 slice 函数,并设置 start, stop 及 step 参数进行,从原数组中切割出一个新数组。

import numpy as np
a = np.arange(10)
s = slice(2,7,2)   # 从索引 2 开始到索引 7 停止,间隔为2
print (a[s])
*********************************************************
[2  4  6]

也可以通过冒号分隔切片参数 start:stop:step 来进行切片操作:

import numpy as np
 
a = np.arange(10)  
b = a[2:7:2]   # 从索引 2 开始到索引 7 停止,间隔为 2
print(b)

拼接、合并与分割

【拼接】

a = np.array([1,1,1])
b = np.array([2,2,2])
c = np.vstack((a,b))     #vertical stack 上下合并
d = np.hstack((a,b))     #horizontal stack 左右合并

print(c)
print(d)
*************************************************************
[[1 1 1]
 [2 2 2]]
[1 1 1 2 2 2]

【维度变化】

a = np.array([1,1,1])
b = np.array([2,2,2])
print(a[np.newaxis,:])        #在行里加了一个维度
print(a[np.newaxis,:].shape)    
print(a[:,np.newaxis])        #在列里加了一个维度
**********************************************************
[[1 1 1]]
(1, 3)
[[1]
 [1]
 [1]]

【合并】

a = np.array([1,1,1])[:,np.newaxis]
b = np.array([2,2,2])[:,np.newaxis]
print(np.hstack((a,a,b,b)))
c = np.concatenate((a,b,b,a),axis=1)   #指定上下合并
print(c)
************************************************************
[[1 1 2 2]
 [1 1 2 2]
 [1 1 2 2]]
[[1 2 2 1]
 [1 2 2 1]
 [1 2 2 1]]

【分割】

a = np.arange(12).reshape((3,4))
print(a)
print(np.split(a,3,axis=0))
print(np.array_split(a,3,axis=1))    #不等分割
print(np.vsplit(a,3))     #纵向分割
print(np.hsplit(a,2))     #横向分割
***********************************************************
[[ 0  1  2  3]
 [ 4  5  6  7]
 [ 8  9 10 11]]
[array([[0, 1, 2, 3]]), array([[4, 5, 6, 7]]), array([[ 8,  9, 10, 11]])]
[array([[0, 1],
       [4, 5],
       [8, 9]]), array([[ 2],
       [ 6],
       [10]]), array([[ 3],
       [ 7],
       [11]])]
[array([[0, 1, 2, 3]]), array([[4, 5, 6, 7]]), array([[ 8,  9, 10, 11]])]
[array([[0, 1],
       [4, 5],
       [8, 9]]), array([[ 2,  3],
       [ 6,  7],
       [10, 11]])]

浅复制和深复制

【浅复制】

a = np.array([10,20,30,40])
b = a
c = a
d = b
a[1] = 22
print(b)
print(d)
a is b
*****************************************
[10 22 30 40]
[10 22 30 40]
True

【深复制】

b = a.copy()     #deep copy
print(b)
a[3] = 55
print(a)
print(b)
a is b
********************************************************
[10 22 30 55]
[10 22 30 55]
[10 22 30 55]
False
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值