numpy基础

  • numpy
  • 创建数组(矩阵)
  • 数值类型操作
  • 数组的形状
  • 数组的运算
  • 读取数据
  • 索引和切片
  • 修改数值
  • 数组的拼接
  • 数组的行列交换
  • 初始化数值
  • 生成随机数
  • copy和view
  • nan和inf
  • 常见数值计算函数


numpy

一个在Python中做科学计算的基础库,重在数值计算,也是大部分Python科学计算库的基础库,多用于在大型、多维数组上执行数值运算

创建数组(矩阵)

import numpy as np
#使用numpy得到ndarray类型数组
#np.arange的用法: arange([start,] stop[, step,],dtype=None)
a=np.array([1,2,3,4,5])
b=np.array(range(1,6))
c=np.arange(1,6)
print(a)
print(type(c))#c的类型
print(a.dtype)#a中数据类型

输出结果
[1 2 3 4 5]
<class 'numpy.ndarray'>
int32

数值类型操作

python 科学计算 pdf python 科学计算入门_数据

import numpy as np
import random
#指定创建的数组的数据类型:
a=np.array([1,0,1,0],dtype=np.bool)#或者使用dtype='?'
print(a)
#修改数组的数据类型:
a=a.astype("i1")#或者使用a.astype(np.int8)
print(a)
#修改浮点型的小数位数:
b=np.array([ random.random() for i in range(10)])
b=np.round (b,3)#保留3位小数
print(b)

输出结果:
[ True False  True False]
[1 0 1 0]
[0.794 0.253 0.33  0.056 0.099 0.836 0.491 0.237 0.862 0.566]

数组的形状

import numpy as np
a=np.asarray(range(12))
print(a)
print(a.shape)#查看数组形状
b=np.asarray([[1,2,3],[4,5,6]])
print(b.shape)
c=a.reshape(3,4)
d=a.reshape(2,2,3)#三维第一个是块数
e=b.reshape(6)#或使用b.flatten()展开成1维数组
f=b.reshape((1,6))
print(c)
print(d)
print(e)
print(f)


输出结果:
[ 0  1  2  3  4  5  6  7  8  9 10 11]

(12,)

(2, 3)

[[ 0  1  2  3]
 [ 4  5  6  7]
 [ 8  9 10 11]]

[[[ 0  1  2]
  [ 3  4  5]] #3维第一维度为分块

 [[ 6  7  8]
  [ 9 10 11]]]

[1 2 3 4 5 6]
[[1 2 3 4 5 6]]

数组的运算

当两个形状相同的数组运算时,加减乘除等均是对应位置数字相加减乘除
当两个数组形状不同的时候,若在某一维度上相同则可以运算

在numpy中轴可以理解为方向,使用0,1,2…数字表示,对于1维数组,只有一个0轴,对于2维数组有0轴和1轴,对于3维数组有0,1,2轴

二维数组

python 科学计算 pdf python 科学计算入门_数据_02


三维数组

python 科学计算 pdf python 科学计算入门_python 科学计算 pdf_03

读取数据

loadtxt(fname, dtype=float, comments='#', delimiter=None,
		converters=None, skiprows=0, usecols=None, unpack=False,ndmin=0, 
		encoding='bytes', max_rows=None)

python 科学计算 pdf python 科学计算入门_数据类型_04


frame:文件、字符串或产生器,可以是.gz或bz2压缩文件

dtype:数据类型,可选,默认np.float,默认情况下对于较大的数据会将其变为科学计数的方式

delimiter:分隔字符串,默认是空格,不指定会导致每行数据为一个整体的字符串

skiprows:跳过前x行,一般跳过第一行表头

usecols:读取指定的列,索引,元组类型

upack :默认是False(0),默认情况下,有多少条数据,就会有多少行。为True(1)的情况下,每一列的数据会组成一行,原始数据有多少列,加载出来的数据就会有多少行,相当于转置的效果

#对数组进行进行转置
a=a.transpose()
a=a.T

索引和切片

#取二维数组a的行(下标从0开始)
a[2]#第三行
a[2:]#取从第三行开始的连续多行构成新数组
a[x,y,z]#取x y z 三行构成新数组
#或者
a[1,:]#第二列
.....

#取二维数组a的列
#取列
a[:,0]#第一列
a[:,1:]#第一列开始的连续的列
a[:,[0,2]]#第一列和第三列

#取多行多列
a[2,3]#取三行四列处的值
a[2:5,1:4]#取3行到5行 2列到4列 (包头不包尾)

#取多个不相邻的点
a[[0,2],[2,1]]

修改数值

#通过上述获得索引再修改数值
a[[0,2],[2,1]]=0
#讲a中小于3的数值换成10
a[a<3]=10
#numpy的三元运算符
np.where(a<3,100,400)#小于3的数字换成100否则换成400
#小于10换成10,大于18换成18
a.clip(10,18)
#赋值为nan(nan为浮点型)
a=a.astype(float) #a原先为整型
a[0,2]=np.nan

数组的拼接

#竖直拼接
np.vstack(x1,x2)#垂直拼接数组
#水平拼接
np.hstack(x1,x2)#横向拼接数组

数组的行列交换

t[[1,2],:] = t[[2,1],:]#行交换
t[:,[1,2]] = t[:,[2,1]]#列交换

初始化数值

#创建全为0数组
np.zeros((3,4))
#创建全为1数
np.ones((3,4))
#10阶方阵 对角线1 其余0
np.eye(10)
# 获取最大值
np.argmax(t,axis=0)#0方向最大值
#最小值
np.argmin(t,axis=0)

生成随机数

python 科学计算 pdf python 科学计算入门_python 科学计算 pdf_05

copy和view

  1. a=b完全不复制,a和b相互影响
  2. a =b[:],视图的操作,一种切片,会创建新的对象a,但是a的数据完全由b保管,他们两个的数据变化是一致的,
  3. a =b.copy(),完全复制,a和b互不影响

nan和inf

nan:不是一个数
inf:正无穷
-inf:负无穷
nan是float型
nan
1.两个nan是不相等的
2.np.nan !=np.nan
3.利用以上的特性,判断数组中nan的个数
4.由于2,通过np.isnan(a)来判断,返回bool类型比如希望把nan替换为0
5.nan和任何值计算都为nan

常见数值计算函数

有数值t
求和: t.sum(axis=None)
均值: t.mean(a, axis=None)受离群点的影响较大
中值:np.median(t,axis=None)
最大值: t.max(axis=None)
最小值: t.min(axis=None)
极值: np.ptp(t,axis=None)即最大值和最小值只差
标准差: t.std(axis=None)
(axis!=None表示统计全部所得值 axis=1表示轴1上所有数的统计值)