NumPy数值计算基础

NumPy数值计算基础

1、利用array函数创建数组对象

array函数的格式:np.array(object, dtype,ndmin)


import numpy as np 
data1 = [1,3,5,7] 
w1 = np.array(data1)
print('w1',w1) 
data2 = (2,4,6,8) 
w2 = np.array(data2) 
print('w2',w2) 
data3 = [[1,2,3,4],[5,6,7,8]]
w3 = np.array(data3) 
print('w3',w3)

dtype:指定义的数据类型

w4 = np.array([1,2,3,4],dtype = 'float64')
print(w2.dtype)

2、arange函数:创建等差一维数组

格式:np.arange([start, ]stop, [step, ]dtype)

注:输出包括 start 不包括stop

warray = np.arange(10) #产生一个0-10的随机数,包括0,不包括10 
print(warray) 
warray1 = np.arange(0,1,0.2)#产生一个0-1的随机数,步长为0.2 
print(warray1)

3、linspace 函数:创建等差一维数组,接收元素数量作为参数。

np.linspace(start, stop, num,) 产生一个从start-stop的值,num 是产生几个数字
wr1 = np.linspace(0,10,4) 
print(wr1)

4、logspace函数:创建等比一维数组

格式:np.logspace(start, stop, num)

注:参数中起始位和终止位代表的是10的幂(默认基数为10),第三个表示元素的个数

wr2= np.logspace(0,1,5) #0指的是10的0次幂 1 指的是10的1次幂 即产生1-10,产生5个 
print(wr2)

5、专门创建数组的函数

(1).zeros函数:创建指定长度或形状的全0数组

格式:np.zeros(shape, dtype=float, order='C')

print(np.zeros(4)) 
print(np.zeros([3,3]))

(2).ones函数:创建指定长度或形状的全1数组

格式:np. ones(shape, dtype=None, order='C')

print(np.ones(5)) 
print(np.ones([2,3]))

(3).diag函数:创建一个对角阵。

格式:np.diag(v, k=0)

w1 = np.diag([1,2,3,4,5,6]) print(w1)

输出结果为:

 

6、ndarray对象属性

属性

说明

ndim 

返回数组的轴的个数

shape

返回数组的维度

size

返回数组元素个数

dtype

返回数据类型

itemsize

返回数组中每个元素的字节大小

print('秩数|轴数',w2.ndim)
print("维度",w2.shape) 
print('元素的个数',w2.size) 
print('数据类型',w2.dtype)

输出结果:

 

改变数组的shape属性

w2.shape=2,3
print('改变shape后',w2)

数组的类型转换

arr1 = np.arange(6) 
print(arr1) 
print(arr1.dtype) #类型为int32
arr2=arr1.astype(np.float64)
print(arr2.dtype) #类型为float64

7、生成随机数

在NumPy.random模块中,提供了多种随机数的生成函数。

如randint函数生成指定范围的随机整数来构成指定形状的数组。

random.randint(参数1,参数2)

参数1、参数2必须是整数

函数返回参数1和参数2之间的任意整数, 闭区间

arr = np.random.randint(100,500,size=(3,4)) #产生一个3行4列的数字,共12个 
print(arr)

rand函数生成【0,1】的随机数

arr = np.random.rand(5) # 产生是0-1的随机数,产生5个 注意区分
np.arang(5))是产生0-5的随机数 
print(arr) 
arr1 = np.random.rand(4,2)#产生0-1的随机,矩阵是4行2列 
print(arr1)

8、数组重塑

(1)对于定义好的数组,可以通过reshape方法改变其数据维度

arr1 = np.arange(8)
print(arr1) 
arr2 = arr1.reshape(4,2); 
print(arr2)

注:reshape的参数中的其中一个可以设置为-1,表示数组的维度可以通过数据本身来推断

arr1 = np.arange(12) 
print('arr1',arr1) 
arr2 = arr1.reshape(2,-1) 
print('arr2',arr2)

(2)与reshape相反的方法是数据散开(ravel)或数据扁平化(flatten)

arr1 = np.arange(12).reshape(3,4) 
print('arr1',arr1) 
arr2 = arr1.ravel() 
arr3 = arr1.flatten() 
print('arr2',arr2) 
print('arr3',arr3)

注:数据重塑不会改原来的数组

9、数组合并

hstack函数:实现横向合并

vstack函数:实现纵向组合是利用vstack将数组纵向合并;

concatenate函数:可以实现数组的横向或纵向合并,参数axis=1时进行横向合并,axis=0时进行纵向合并。

hstack

arr1 = np.arange(6).reshape(3,2)
print('arr1',arr1)
arr2 = arr1 * 2 
print('arr2',arr2) 
arr3 = np.hstack((arr1,arr2)) #横向合并
print('arr3',arr3)

Vstack

arr1 = np.arange(6).reshape(3,2) 
print('arr1',arr1)
arr2 = arr1 * 2 
print('arr2',arr2)
arr3 = np.vstack((arr1,arr2)) #纵向合并
print('arr3',arr3)

纵向合并输出结果:

concatenate:

arr1 = np.arange(6).reshape(3,2)
print('arr1',arr1) 
arr2 = arr1 * 2 
print('arr2',arr2) 
print('横向输出',np.concatenate((arr1,arr2),axis=1)) # axis=1表示横向合并,
print('纵向输出',np.concatenate((arr1,arr2),axis=0)) # axis=0表示纵向合并

输出结果:

 

10、数组分割

与数组合并相反,hsplit函数、vsplit函数和split函数分别实现数组的横向、纵向和指定方向的分割。

注:split在参数axis=1时实现横向分割,axis=0时则进行纵向分割。

arr = np.arange(16).reshape(4,4)
#print('arr',arr) #print('横向分割为\n',np.hsplit(arr,2)) 
print('横向分割为\n',np.split(arr,2,axis=1)) #横向 
#print('纵向分割为\n',np.vsplit(arr,2)) 
print('横向分割为\n',np.split(arr,2,axis=0)) #纵向

11、数组转置和轴对换

(1).数组转置是数组重塑的一种特殊形式,可以通过transpose方法进行转置。

注明:transpose(x,y ,z) x轴用0表示 y轴用1表示, Z轴用2表示,transpose(1,0)表示行、列调换了位置

transpose(0,1,2)

transpose(0,2,1) 表示y轴和z轴调换

transpose(1,0,2) 表示 x轴和y轴调换

arr = np.arange(6).reshape(3,2) 
print('矩阵',arr) 
print('转化矩阵',arr.transpose((1,0))) # x轴用0表示 y轴用1表示

(2).除了使用transpose外,可以直接利用数组的T属性进行数组转置。

arr = np.arange(6).reshape(3,2) 
print('arr',arr)
print('转换后',arr.T)

(3)数组的轴对换swapaxes

arr = np.arange(6).reshape(3,2)
print('arr',arr) 
print(arr.swapaxes(0,1))

以上三种方式的输出结果都一样,如下:

 

12、一维数组的索引

一维数组的索引类似Python中的列表

arr = np.arange(10) print(arr) 
print(arr[2]) #2 
print(arr[-1]) #倒数第一个,9 
print(arr[1:4]) #结果为1,2,3

13、数组的复制copy

arr = np.arange(10)
print(arr) 
arr1 = arr[-4:-1].copy() 
print(arr1)

结果为:

14、数组的运算

数组之所以很强大是因为不需要通过循环就可以完成批量计算.

a = [1,2,3] 
b = [] 
for i in a: 
b.append(i*i) 
print(b) 
c = np.array([1,2,3]) 
d = c*2 
print(d)

15、常用的ufunc函数运算

常用的ufunc函数运算有四则运算、比较运算和逻辑运算。

1)四则运算:

加(+)、减(-)、乘(*)、除(/)、幂(**)。数组间的四则运算表示对每个数组中的元素分别进行四则运算,所以形状必须相同。

2)比较运算:

>、=、

x = np.array([1,2,3])
y = np.array([4,5,6])
print( '相加',x+y) 
print( '相减',x-y) 
print('相乘',x*y) 
print( '求幂',x**y)

x = np.array([1,2,3]) 
y = np.array([4,5,6])
print( '比较结果<',x<y) 
print( '比较结果>',x>y) 
print('比较结果==',x==y) 
print('比较结果>=',x>=y) 
print('比较结果!=',x!=y)

输出结果:

 

16、读/写文件

读文件 loadtxt

a = np.loadtxt('e:/a.txt') print(a)

写文件 savetxt

a = np.arange(0,12,0.5).reshape(4,-1) 
np.savetxt('e:/b.txt',a,fmt='%.1f',delimiter=',')

17、排序Sort

(1).Sort函数对数据直接进行排序,调用改变原始数组,无返回值。

格式:numpy.sort(a, axis, kind, order)

arr = np.array([7,9,5,2,9,4,3,1,4,3])
print('原数组:',arr) 
arr.sort() 
print('排序后:',arr)

(2) 带轴向参数的sort排序 axis=1:横向,axis=0:纵向

arr = np.array([[4,2,9,5],[6,4,8,3],[1,6,2,4]]) 
print('原数组:\n',arr) 
arr.sort(axis = 1) #沿横向排序 
print('横向排序后:\n',arr)

输出结果:

 

(2).np.argsort(): 返回的是数组值从小到大的索引值;

arr = np.array([7,9,5,2,9,4,3,1,4,3]) 
print('原数组:',arr) 
print('排序后:',arr.argsort()) #返回值为数组排序后的下标排列
print('显示较大的5个数:',arr[arr.argsort()][-5:])

输出结果:

 

(3)使用lexsort排序

a = ['lu','ba','lu'] 
b = ['cu','aa','db'] 
ind = np.lexsort((b,a)) 
print('ind',ind)

输出结果;

18、重复数据与去重

(1) 去重:在NumPy中,对于一维数组或者列表,unique函数去除其中重复的元素,并按元素由大到小返回一个新的元组或者列表

names = np.array(['红色','蓝色','黄色','白色','红色'])
print('原数组:',names) 
print('去重后的数组:',np.unique(names))

输出结果:

(2)重复数据:tile

统计分析中有时也需要把一个数据重复若干次,使用tile和repeat函数即可实现此功能。

tile函数的格式:np.tile(A, reps)

其中,参数A表示要重复的数组,reps表示重复次数。

repeat函数的格式:np.repeat(A, reps, axis = None)

“a”: 是需要重复的数组元素,

“repeats”: 是重复次数,

“axis”: 指定沿着哪个轴进行重复,axis = 0表示按行进行元素重复;axis = 1表示按列进行元素重复。

arr = np.arange(5) 
print('原数组:',arr) 
wy = np.tile(arr,3) #复复3次 
print('重复数据处理:\n',wy)

输出结果:

 

(3)使用repeat函数实现数据重复

arr = np.arange(5) 
print('原数组:',arr) 
wy = np.tile(arr,3)
 print('重复数据处理:\n',wy) 
arr2 = np.array([[1,2,3],[4,5,6]]) 
print('重复数据处理:\n',arr2.repeat(2,axis=0))

输出结果

 

19、常用统计函数

NumPy中提供了很多用于统计分析的函数,常见的有sum、mean、std、var、min和max等。

几乎所有的统计函数在针对二维数组的时候需要注意轴的概念。

axis=0时表示沿着纵轴进行计算,axis=1时沿横轴进行计算。

arr = np.arange(20).reshape(4,5)
print('创建的数组:\n',arr) 
print('数组的和:',np.sum(arr)) 
print('数组纵轴的和:',np.sum(arr,axis = 0)) 
print('数组横轴的和:',np.sum(arr,axis = 1)) 
print('数组的最大值:',np.max(arr)) 
print('数组的最小值:',np.min(arr))

输出结果为:

 

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值