numpy基础

概述

  • Numpy本质上是一个多维数组库
  • 创建多维数组很方便,可以替代多维列表
  • 速度比多维列表块
  • 支持向量和矩阵的各种数学运算
  • 所有元素类型必须相同

创建数组的函数

函数功能
array(x)根据列表或元组x创建数组(即参数是列表或元组)
arange(x,y,i)创建一维数组,元素等价于range(x,y,i)——[x,y)步长为i
linespace(x,y,n)创建一个由区间[x,y]的n-1等分点构成的一维数组,包含x和y
random.randint()创建一个元素为随机整数的数组=》python随机数是伪随机
zeros(n)创建一个元素全为0.0的 长度为n的数组
ones(n)创建一个元素全为1.0的 长度为n的数组
import numpy as np #以后numpy简写为np

print(np.array([1,2,3])) 
#>>[1 2 3]
print(np.array((1,2,3)))
#>>[1 2 3]
 
print(np.arange(1,9,2)) #=>[1,9) 步长为2
#>>[1 3 5 7]

print(np.linspace(1,10,4)) 
#=> [1,10] 出一个元素n个的等差数列
#>>[ 1. 4. 7. 10.] x,y,n #==n-1等分点分出n个数 

print(np.random.randint(10,20,[2,3])) 
#>>[10,20) 范围里随机找数,生成两行三列的二维数组
#>>[[12 19 12] 
#>> [19 13 10]] 


print(np.random.randint(10,20,5)) 
#>>[16 10 13 18 17]

a = np.zeros(3) 
print(a)
#>>[ 0. 0. 0.] 
print(list(a)) #>>转化数据类型变回列表
#>>[0.0, 0.0, 0.0]

a = np.zeros((2,3),dtype=int) #创建一个2行3列的元素都是整数0的数组
print(a) #>>写了dtype=int使得里面的数字都是整数
#>>[[0 0 0]
#>> [0 0 0]]

Numpy数组常用属性和函数

属性或函数含义或功能
dtype数组元素的类型
ndim数组是几维的
shape数组每一维的长度
size数组元素个数
argwhere(…)查找元素
tolist()转换为list
min()求最小元素
max()求最大元素
reshape(…)改变数组的形状
flatten()转换成一维数组
import numpy as np 
b = np.array([i for i in range(12)]) #列表生成式生成列表做完参数转换为数组
#b是[ 0 1 2 3 4 5 6 7 8 9 10 11]

a = b.reshape((3,4)) #转换成3行4列的数组,b保持不变
print(a)
#>> [[ 0  1  2  3]
#>>  [ 4  5  6  7]
#>>  [ 8  9 10 11]]
print(len(a)) #>> 3 a有3行
print(a.size) #>> 12 a有12个元素

print(a.ndim) #>>2 a是二维的数组
print(a.shape) #>>(3,4) a是3行4列的数组
print(a.dtype) #>>int32 a的元素类型是31位的整数
L = a.tolist() #>> 转换为列表,赋值给L,a不变
print(L)#L是个二维列表
#>>[[0, 1, 2, 3], [4, 5, 6, 7], [8, 9, 10, 11]]

b = a.flatten()#转换成一维数组
print(b)
#>>[ 0  1  2  3  4  5  6  7  8  9 10 11]

Numpy数组元素增删

  • numpy数组一旦生成,元素就不能增删

  • 函数增删的本质都是返回一个新数组

函数功能
append(x,y)若y是数组、列表或元组,就将y的元素添加金数组x得到新数组;否则将y本身添加进数组x得到新数组(x不变)
concatenate(…)拼接多个数组或列表
delete(…)删除数组元素得到新数组
import numpy as np 
a = np.array((1,2,3)) #a是[1 2 3]
b = np.append(a,10)  #a不会发生变化
print(b)
#>>[ 1 2 3 10]

print(np.append(a,[10,20])) 
#>>[ 1 2 3 10 20]

c = np.zeros((2,3),dtype=int)
#c是2行3列的全0数组

print(np.append(a,c)) #>>将c拧成一维,再append
#>>[1 2 3 0 0 0 0 0 0]

print(np.concatenate((a,[10,20],a))) 
#>>[ 1 2 3 10 20 1 2 3]

#!!!注意多维数组的拼接
#c是两行三列的二维数组
print(np.concatenate((c,np.array([[10,20,30]])))) 
#c拼接一行[10,20,30]得新数组 

print(np.concatenate((c,np.array([[1,2],[10,20]])),axis=1))
#axis的参数表明拼接的发生在行拼接还是列拼接
#c的第0行拼接了1,2两个元素、第1行拼接了10,20两个新元素后得到新数组

#print(np.concatenate((c,np.array([[1],[2]]))))
#会报错!!!
import numpy as np 
a = np.array((1,2,3,4)) 
b = np.delete(a,1) #删除a中下标为1的元素,a不会改变 
print(b)
#>>[1 3 4]
print(a)
#>>[1 2 3 4] !!!是复制过去的新数组,不会改变a本身


b = np.array([[1,2,3,4],[5,6,7,8],[9,10,11,12]]) 
print(np.delete(b,1,axis=0))#删除b的第1行得新数组 
#>>[[ 1 2 3 4]
#>> [ 9 10 11 12]] 


print(np.delete(b,1,axis=1)) #删除b的第1列得新数组
#>>[[ 1  3  4]    
#>> [ 5  7  8]    
#>> [ 9 11 12]]

print(np.delete(b,[1,2],axis=0)) #删除b的第1行和第2行得新数组
#>>[[1 2 3 4]]

print(np.delete(b,[1,3],axis=1)) #删除b的第1列和第3列得新数组
#>>[[ 1  3]       
#>> [ 5  7]       
#>> [ 9 11]]

#!!!np的增删不会影响到操作的原数组

Numpy 查找

import numpy as np 
a = np.array((1,2,3,5,3,4))

pos = np.argwhere(a==3)
print(pos)
#pos是[[2] [4]] #二维数组存储每一个符合条件的元素

a = np.array([[1,2,3],[4,5,2]]) 
print(2 in a)
#>>True

pos = np.argwhere(a==2)
print(pos) 
#>>[[0 1] 第0行第1列
#>> [1 2]] 返回值是numpy的数组

b = a[a>2] #!!!达到条件筛查的结果
print(b)
#>>[3 4 5]

a[a > 2] = -1 #!!!直接进行了修改
print(a)
#>>[[ 1  2 -1]
#>> [-1 -1  2]]

Numpy数学运算

主要方便在能快速作用在整个数组

import numpy as np 
a = np.array((1,2,3,4)) 

b = a + 1 
print(b)
#>>[2 3 4 5]

print(a*b) #>>[2 6 12 20] a,b对应元素相乘
print(a+b) #>>[3 5 7 9] a,b对应元素相加
#相应元素,因此两个运算数组必须是同型的

c = np.sqrt(a*10) #a*10是[10 20 30 40] 
print(c) #>>[ 3.16227766 4.47213595 5.47722558 6.32455532]

Numpy数组切片

numpy数组的切片是“视图”, 是原数组的一部分,而非一部分的拷贝

import numpy as np 
a = np.arange(8) #a是[0 1 2 3 4 5 6 7] 
b = a[3:6] #注意,b是a的一部分
print(b)
#>>[3 4 5]

c = np.copy(a[3:6]) #c是a的一部分的拷贝 

b[0] = 100 #会修改a

print(a) 
#>>[ 0 1 2 100 4 5 6 7]

print(c)
#>>[3 4 5] c不受b影响
#c是拷贝过来的

a = np.array([[1,2,3,4],[5,6,7,8],[9,10,11,12],[13,14,15,16]]) 
b = a[1:3,1:4]#二维切片,切除矩形
#行取值[1,3)
#列取值[1,4)
#b是>>[[ 6 7 8] [10 11 12]]
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Caaaaaan

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值