numpy基础知识学习笔记

本文介绍了如何在PyCharm中无需安装numpy直接导入并使用,涵盖了numpy的基础操作如数组创建、基础运算、索引、数组合并与分割,以及copy和deepcopy的区别。通过实例展示了numpy的array创建、基本运算、索引技巧和数据处理方法。
摘要由CSDN通过智能技术生成

numpy安装

pycharm中生成的项目文件包含numpy不需要安装,直接导入即可

import numpy as np

numpy的基本使用

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

a = np.array([2,3,4],dtype=np.int32) #新建numpy数组,dtype是设置数组元素的属性
print(a.dtype)

b = np.array([[2,3,4],[5,6,7]]) #定义二位的numpy数组,也就是矩阵,和列表的定义方法类似
print(b)

c = np.zeros( (3,4) ) #定义一个三行四列的零矩阵
print(c)

d = np.ones((3,4),dtype=np.int32) #定义一个三行四列元素全部为1的矩阵
print(d)

e = np.arange(10,20,2) #定义一个数列,和range()函数类似,左闭右开,2是步长,默认为1
print(e)

f = np.arange(12).reshape((3,4))#定义一个从0到11形状为三行四列的数组
print(f)

g = np.linspace(1,10,5) #生成1到10的线段,第三个参数的意思是取线段的五个点使其四等分,当然起点是1,终点是10
print(g) 

#同样也可以用reshape()去修改g的形状
#g = np.linspace(1,10,5).reshape(2,3) 
#print(g) 

输出结果

a: int32
b: [[2 3 4]
 [5 6 7]]
c: [[0. 0. 0. 0.]
 [0. 0. 0. 0.]
 [0. 0. 0. 0.]]
d: [[1 1 1 1]
 [1 1 1 1]
 [1 1 1 1]]
e: [10 12 14 16 18]
f: [[ 0  1  2  3]
 [ 4  5  6  7]
 [ 8  9 10 11]]
g: [ 1.    3.25  5.5   7.75 10.  ]

numpy的基础运算

a = np.array([10,20,30,40])
b = np.arange(4) #生成0到3的一维数组,也可以说是一行四列的矩阵


#加减法就是元素逐个相加或者相减
print('加减法就是元素逐个相加或者相减')
c = a+b
d = a-b
print(a,b)
print(c)
print(d)


#各个元素的平方
print('各个元素的平方')
e = b**2
print(c)


#三角函数
print('三角函数')
f = np.sin(3.14)
g = np.cos(0)
print(f,g)


#大于小于等的比较
print('大于小于等的比较')
print(b)
print(b<3)
print(b==3)

#两种乘法
print('两种乘法')
m = np.array([[1,1],[0,1]])
n = np.arange(4).reshape((2,2))
result = m*n #各个元素相乘
result_dot = np.dot(m,n) #矩阵乘法
result_dot_2 = m.dot(n) #矩阵乘法的第二种表达形式,也是m右乘n
print(result)
print(result_dot)
print(result_dot_2)

#求和最大值最小值
print('求和最大值最小值')
k = np.random.random((2,3))
print(k)
print(np.sum(k)) #求和
print(np.min(k)) #最小值
print(np.max(k)) #最大值
#sum()函数可以设置axis参数,当axis=1的时候在横向进行运算,当axis=0的时候在纵向进行运算
print(np.sum(k,axis=1)) #横向的元素求和
print(np.min(k,axis=0)) #依次比较纵向元素,返回最小值
print(np.max(k,axis=1)) #依次比较横向元素,返回最大值

输出结果

加减法就是元素逐个相加或者相减
[10 20 30 40] [0 1 2 3]
[10 21 32 43]
[10 19 28 37]
各个元素的平方
[10 21 32 43]
三角函数
0.0015926529164868282 1.0
大于小于等的比较
[0 1 2 3]
[ True  True  True False]
[False False False  True]
两种乘法
[[0 1]
 [0 3]]
[[2 4]
 [2 3]]
[[2 4]
 [2 3]]
求和最大值最小值
[[0.60469268 0.60164501 0.40323566]
 [0.01248801 0.72253772 0.30805768]]
2.6526567555759173
0.012488011443382963
0.7225377172452148
[1.60957335 1.04308341]
[0.01248801 0.60164501 0.30805768]
[0.60469268 0.72253772]

numpy基础运算拓展

a = np.arange(2,14).reshape((3,4))
print('a:',a)

print('数组中最大元素与最小元素的索引')
print(np.argmin(a)) #a数组中最小元素的索引
print(np.argmax(a)) #a数组中最大元素的索引

print('数组的平均值、中位数')
print(a.mean()) #a数组所有元素的平均值
print(np.median(a)) #a数组的中位数

print('数组元素的累加与差')
print(np.cumsum(a)) #这个函数的输出结果a数组元素从头到第n个位置的元素的累加,也就是此函数的第二个输出结果就是a数组中第一个元素加上第二个元素
print(np.diff(a)) #a数组左右两个元素的差

print('找出数组中非0的数')
print(np.nonzero(a)) #这个函数的输出结果是两个数组,第一个数组表示非零元素的行位置,第二数组表示非零元素的列位置

print('对数组进行排序')
b = np.arange(14,2,-1).reshape((3,4))
print(b)
print(np.sort(b)) #排序的规则是逐行排序,从小到大

print('矩阵的转置')
print(np.transpose(a))
print(a.T) #转置

print('让数组中大于最大值的数等于最大值,小于最小值的数等于最小值')
print(a)
print(np.clip(a,5,9)) #让a数组中大于9的数全部变成9,小于5的数全部变成5

输出结果

a: [[ 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]]
找出数组中非0的数
(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))
对数组进行排序
[[14 13 12 11]
 [10  9  8  7]
 [ 6  5  4  3]]
[[11 12 13 14]
 [ 7  8  9 10]
 [ 3  4  5  6]]
矩阵的转置
[[ 2  6 10]
 [ 3  7 11]
 [ 4  8 12]
 [ 5  9 13]]
[[ 2  6 10]
 [ 3  7 11]
 [ 4  8 12]
 [ 5  9 13]]
让数组中大于最大值的数等于最大值,小于最小值的数等于最小值
[[ 2  3  4  5]
 [ 6  7  8  9]
 [10 11 12 13]]
[[5 5 5 5]
 [6 7 8 9]
 [9 9 9 9]]

numpy的索引

a = np.arange(3,15)

print(a)
print(a[3]) #输出第四个元素

b = np.arange(3,15).reshape(3,4)
print(b)
print(b[2][1]) #和下面的都是输出第三行第二列的元素
print(b[2,1])
print(b[2,:]) #和列表相同,可以用冒号代替这一行所有的元素

#输出矩阵b的每一行
for row in b:
    print(row)

#输出矩阵b的每一列,实际上不存在这种功能,但可以通过转置来实现
print(b)
for col in b.T:
    print(col)

#输出矩阵b的每一个元素,不可以直接循环遍历b,这样输出的是每一行,要先把矩阵平整化,让它变成一个一维数组
for item in b.flat:
    print(item)

numpy的array合并

a = np.array([1,1,1])
b = np.array([2,2,2])

print(np.vstack((a,b))) #vertical stack 垂直地上下合并
print(np.hstack((a,b))) #horizontal stack 水平地左右合并

#本来a是一个数组,我们没有办法使其转置
print(a.T)
#但是我们只需要给其增加一个纬度,就能让其变成一行三列的矩阵
print(a[np.newaxis,:].T) #在左边加是让其在横向有维度
print(a[:,np.newaxis]) #在右边加就是让其在纵向有纬度,直接变成一行三列了


#多个array进行合并
a=a[np.newaxis,:]
b=b[np.newaxis,:]
c = np.concatenate((a,b),axis=0) #axis=0的时候就是水平方向地上下合并
print(c)
c = np.concatenate((a,b),axis=1) #axis=1的时候就是垂直方向地左右合并
print(c)

numpy的array分割

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

print(np.split(a,2,axis=1)) #对array纵向分割,分成两块
print(np.split(a,3,axis=0)) #对array横向分割,分成三块
#split()只可以对array进行等分,有三行的话,横向只能分三块,有四列,纵向不能分成三块

#实现不等地分割
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)) #沿着array的纵方向水平切割
print(np.hsplit(a,2)) #沿着array的水平方向垂直切割
#这两个函数真的反人类,vertical明明是垂直,horizontal是水平,记忆地时候就记他们的作用和函数名是相反地
#然后axis取值速记,axis=1s的时候,可以把1看成垂直的,所以axis=1代表着纵向,反之axis=0代表水平方向

numpy的copy和deep copy

copy实质上只做了一件事情,就是单纯地把指针指了过去

而deep copy所做的事情:1.在内存中开辟新的地址;2.复制原来的值;3.指针指向新的地址

a = np.arange(4)

#传递性质
b = a
c = a
d = b
print(a)
a[0] = 2
print(a)
print(b)
print(d)
print(b is a)
print(d is a)

#所以说,如果当我修改d里面元素值的时候,a的元素值也会跟着发生变化
d[1:3] = [22,33]
print(d)
print(a)
print(b)
print(b is a)
print(d is a)

#本质上他们之间传递的是内存上的地址,如果我们不想在复制array的时候让其关联起来
b = a.copy()  #deep copy 这就单纯的把值给他,而地址没有传递
a[2] = 100
print(a)
print(b)
print(a is b)

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值