机器学习基础之科学数据包(numpy数据包的基本操作)

本文详细介绍了numpy数据包,包括其属性、如何创建array、基础运算、索引技巧、array的合并与分割,以及copy和deepcopy的区别,是机器学习初学者掌握numpy的实用指南。
摘要由CSDN通过智能技术生成

numpy数据包

numpy的属性

代码示例

import numpy as np
array=np.array([[1,2,3],[2,3,4]])  #利用numpy将一个列表转换成矩阵数组
print(array)
print("number of dim:",array.ndim)  #显示矩阵数组的维度
print("shape:",array.shape)  #显示矩阵数组的形状
print("size:",array.size)   #显示矩阵数组包含的元素
#结果
[[1 2 3]
 [2 3 4]]
number of dim: 2
shape: (2, 3)
size: 6

numpy创建array

import numpy as np
a=np.array([1,2,3],dtype=np.int)  #定义数组中元素的类型
print(a.dtype)
b=np.zeros((3,4))   #定义一个3行4列的零矩阵
print("b=",b)
c=np.ones((3,4))   #定义一个3行4列的全一矩阵
print("c=",c)
d=np.empty((3,4))   #定义一个3行4列的全空矩阵
print("d=",d)
e=np.arange(12).reshape((3,4))  #定义一个元素从0-11的3行4列的有序矩阵
print("e=",e)
f=np.linspace(1,10,5)    #从1到10,分成五份,组成一个1行5列的矩阵
print("f=",f)
g=np.linspace(1,10,6).reshape((2,3))   #从1到10,分成六份,组成一个2行3列的矩阵
print("g=",g)
#结果
int32
b= [[0. 0. 0. 0.]
 [0. 0. 0. 0.]
 [0. 0. 0. 0.]]
c= [[1. 1. 1. 1.]
 [1. 1. 1. 1.]
 [1. 1. 1. 1.]]
d= [[1. 1. 1. 1.]
 [1. 1. 1. 1.]
 [1. 1. 1. 1.]]
e= [[ 0  1  2  3]
 [ 4  5  6  7]
 [ 8  9 10 11]]
f= [ 1.    3.25  5.5   7.75 10.  ]
g= [[ 1.   2.8  4.6]
 [ 6.4  8.2 10. ]]

numpy的基础运算

代码示例

#一维矩阵数组
import numpy as np
a=np.array([10,20,30,40])
b=np.arange(4)
print("a+b=",a+b)   #矩阵的加减乘除运算
c=10*np.sin(a)
print("c=",c)     #对矩阵进行函数运算
print("b**2=",b**2)  #对矩阵进行幂运算
print("b<3=",b<3)   #判断矩阵的元素是否小于3
print("b==3",b==3)  #判断矩阵的元素中是否包含3
#结果
a+b= [10 21 32 43]
c= [-5.44021111  9.12945251 -9.88031624  7.4511316 ]
b**2= [0 1 4 9]
b<3= [ True  True  True False]
b==3 [False False False  True]
#多维矩阵数组
import numpy as np
a=np.array([[10,20],[30,40]])
b=np.arange(4).reshape((2,2))
print("a*b=",a*b)   #矩阵中的元素逐个相乘
c=np.dot(a,b)   #进行矩阵乘法运算
print("c=",c)
c1=a.dot(b)  #矩阵乘法的另一种形式
print("c1=",c1)
#结果
a*b= [[  0  20]
 [ 60 120]]
c= [[ 40  70]
 [ 80 150]]
c1= [[ 40  70]
 [ 80 150]]
import numpy as np
a=np.random.random((2,4))  #随机产生一个元素在0到1范围的2行4列的矩阵数组
print(a)
print("矩阵中元素之和:",np.sum(a))
print("矩阵元素的最大值:",np.max(a))
print("矩阵元素的最小值",np.min(a))
print("对矩阵的每一列进行求和:",np.sum(a,axis=0))    #axis=0表示按列相加
print("对矩阵的每一行寻求最大值:",np.max(a,axis=1))  #axis=1表示按行寻找
#结果
[[0.0690341  0.13945793 0.74177103 0.4820041 ]
 [0.80266888 0.27302949 0.91706046 0.2065932 ]]
矩阵中元素之和: 3.631619173410745
矩阵元素的最大值: 0.9170604575512512
矩阵元素的最小值 0.06903410300439006
对矩阵的每一列进行求和: [0.87170298 0.41248742 1.65883148 0.68859729]
对矩阵的每一行寻求最大值: [0.74177103 0.91706046]
import numpy as np
A=np.arange(2,14).reshape((3,4))
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.nonzero(A))   #输出的是矩阵中非零元素的位置
print("将矩阵中每一行的元素进行由小到大的排列",np.sort(A))
print("矩阵的转置:",np.transpose(A))  #也可以写成print(A.T)
print(np.clip(A,5,9))   #将矩阵中所有小于5的元素变成5,大于9的元素变成9
#结果
矩阵中最小元素的索引值: 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]]
找出矩阵元素中非零的元素 (array([0, 0, 0, 0, 1, 1, 1, 1, 2, 2, 2, 2], dtype=int64), array([0, 1, 2, 3, 0, 1, 2, 3, 0, 1, 2, 3], dtype=int64))
将矩阵中每一行的元素进行由小到大的排列 [[ 2  3  4  5]
 [ 6  7  8  9]
 [10 11 12 13]]
矩阵的转置: [[ 2  6 10]
 [ 3  7 11]
 [ 4  8 12]
 [ 5  9 13]]
[[5 5 5 5]
 [6 7 8 9]
 [9 9 9 9]]

numpy的索引

import numpy as np
A=np.arange(3,15).reshape((3,4))
print(A)
print(A[2,1])   #打印第三行,第二列的元素(索引都是从0开始)
print(A[2][1])  #另一种表达方式
#结果
[[ 3  4  5  6]
 [ 7  8  9 10]
 [11 12 13 14]]
12
12
print(A[2,:])   #打印第三行的所有元素
[11 12 13 14]
print(A[:,1])   #打印第二列的所有元素
[ 4  8 12]
for row in A:
    print(row)  #通过迭代输出矩阵的每一行的元素
[3 4 5 6]
[ 7  8  9 10]
[11 12 13 14]
for col in A.T:
    print(col)  #通过迭代输出矩阵的每一列的元素
[ 3  7 11]
[ 4  8 12]
[ 5  9 13]
[ 6 10 14]
for item in A.flat:
    print(item)  #通过迭代输出矩阵的每一个元素
3
4
5
6
7
8
9
10
11
12
13
14

numpy的array合并

import numpy as np
A=np.array([1,1,1])
B=np.array([2,2,2])
C=np.vstack((A,B))   #进行垂直方向的合并
print("C=",C)
print(A.shape,C.shape)
D=np.hstack((A,B))   #进行水平方向的合并
print("D=",D)
print(A.shape,D.shape)
#结果
C= [[1 1 1]
 [2 2 2]]
(3,) (2, 3)
D= [1 1 1 2 2 2]
(3,) (6,)
A=np.array([1,1,1])
print(A)
print(A.shape)
print(A[np.newaxis,:].shape)  #给A在行上增加一个维度
print(A[np.newaxis,:])
#结果
[1 1 1]
(3,)
(1, 3)
[[1 1 1]]
print(A[:,np.newaxis].shape)  #给A在列上增加一个维度
print(A[:,np.newaxis])
[[1 1 1]]
(3, 1)
[[1]
 [1]
 [1]]
import numpy as np
A=np.array([1,1,1])[:,np.newaxis]
B=np.array([2,2,2])[:,np.newaxis]
C=np.concatenate((A,B,B,A),axis=0)   # 在垂直方向进行合并
print("C=",C)
print(A.shape,C.shape)
C= [[1]
 [1]
 [1]
 [2]
 [2]
 [2]
 [2]
 [2]
 [2]
 [1]
 [1]
 [1]]
(3, 1) (12, 1)
D=np.concatenate((A,B,B,A),axis=1)   #进行水平方向的合并
print("D=",D)
print(A.shape,D.shape)
D= [[1 2 2 1]
 [1 2 2 1]
 [1 2 2 1]]
(3, 1) (3, 4)

numpy的array分割

import numpy as np
A=np.arange(12).reshape((3,4))
print(A)
[[ 0  1  2  3]
 [ 4  5  6  7]
 [ 8  9 10 11]]
print(np.split(A,2,axis=1))  #对列进行分割,分割成两部分


```python
print(np.split(A,3,axis=0))  #对行进行分割,分割成三部分
[array([[0, 1, 2, 3]]), array([[4, 5, 6, 7]]), array([[ 8,  9, 10, 11]])]
print(np.array_split(A,3,axis=1))    #对列进行不等量分割,分割成三部分
[array([[0, 1],
       [4, 5],
       [8, 9]]), array([[ 2],
       [ 6],
       [10]]), array([[ 3],
       [ 7],
       [11]])]
print(np.vsplit(A,3))   #垂直方向分割
print(np.hsplit(A,2))   #水平方向分割
[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]])]

numpy中的copy和deepcopy

import numpy as np
a=np.arange(4)
print("a=",a)
b=a
print("b=",b)
c=b
print("c=",c)
a[1:3]=[22,33]
print("a=",a)
print("b=",b)
print("c=",c)
d=a.copy() #deep copy
a[3]=44
print("a=",a)
print("d=",d)
a= [0 1 2 3]
b= [0 1 2 3]
c= [0 1 2 3]
a= [ 0 22 33  3]
b= [ 0 22 33  3]
c= [ 0 22 33  3]
a= [ 0 22 33 44]
d= [ 0 22 33  3]
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值