人生苦短,我学python-numpy库

数组基础

导入numpy库:import numpy as np

array数组引入

import numpy as np
a = np.array([1,2,3,4])#一维数组
b = np.array([-1,-2,-3,-4])
d=np.array([[1,2,3],[34,5,6]])#二维数组
print(type(a))#数组类型
print(a)
print(a+b)#同维同数据的数组可以进行相加,对应元素相加
print(a*b)#对应元素相乘
print(d)

结果为:

<class 'numpy.ndarray'>
[1 2 3 4]
[0 0 0 0]
[ -1  -4  -9 -16]
[[ 1  2  3]
 [34  5  6]]

数组对比列表,元组的优点:不用进行for/while循环, 两个数组就可以直接进行对应元素相加/相乘/除/求余等运算,前提是维度相同。

array数组属性

import numpy as np
a = np.array([1,2,3,4])#一维数组
b = np.array([-1,-2,-3,-4])
d=np.array([[1,2,3],[34,5,6]])#二维数组
print(a.shape)#查看数组几行几列
print(d.shape)
print(d.ndim)#查看数组维度
print(a.dtype)#查看数组内数据类型
print(d.size)#查看数组内几个元素,对列表和元组,字典也可以用
print(a.itemsize)#查看每个元素所占的字节数
print(a.nbytes)#数组内总字节数
a.fill(4.8)#将数组a内的数据全部转变为4.8,但本是整数的类型,故变成了4
print(a)

结果为:

(4,)
(2, 3)
2
int32
6
4
16
[4 4 4 4]

注:当数组被建立的时候,其内部的数据类型就已经确定了,不可以在改变,只可以改变新加入的数据。 故a.fill(4.8)进行改变时,强制转变为了整数类型。

array数组的类型

默认类型和指定类型

import numpy as np
a = np.array([1+2j,2,4,6+1j])
b = np.array([2.3,4,5,6.3])
print(a.dtype)#数组会自动确定其数据类型
print(b.dtype)
print(a.imag)#查看实部
print(a.real)#查看虚部
print(a.conj())#查看复共轭
c = np.array(['kzkz',2,4,5])#自动转为字符串类型
print(c)
d = np.array([2,4,5,1],dtype=float)#生成数组时指定类型
print(d.dtype)
e = np.array(['ad',2.4,[23,4,5],4],dtype=object)#object是全类型
print(e.dtype)
print(e*2)

结果为:

complex128
float64
[2. 0. 0. 1.]
[1. 2. 4. 6.]
[1.-2.j 2.-0.j 4.-0.j 6.-1.j]
['kzkz' '2' '4' '5']
float64
object
['adad' 4.8 list([23, 4, 5, 23, 4, 5]) 8]

数组类型转换

1.针对一个整数(int型),常用4字节表示,也就是32bit;
2.针对一个小数(float型),常用8字节表示,也就是64bit;
3.而如果是复数的小数,由于含实部、虚部,所以就是128bit了;
4.针对int8,主要用于处理字符、图像这种特殊整型数。
形式:
np.int8()
np.int16()
np.int32()
np.int64()
np.float64()
np.uint8()
np.complex128()

import numpy as np
x=np.array([1,2,3])
b=np.log10(x)
c=np.int32(b) #转化为整形
print(b)
print(c)
[0.         0.30103    0.47712125]
[0 0 0]

数组索引

和列表元组一样,数组也有索引。

实现数字和数字块的提取

方法:x[行索引,列索引]

import numpy as np
a=np.array([[1,2,4],
            [4,5,6]])
print(a)
print(a[1])#打印第二行
print(a[1,2])#打印第2行第三列的数
print(a[:,1])#打印第二列的数
[[1 2 4]
 [4 5 6]]
[4 5 6]
6
[2 5]

数组运算

和matlab极其相似,可根据numpy库需求从matlab中找

两个Array数组只要二者维数、大小相同,它们之间就可以进行加、减、乘、除、乘方、求余、等等计算,其运算规则即为对这两个数组对应元素之间进行相应的计算

import numpy as np
# Array数组之间可以进行对应元素的大小判断
x=np.array([1,2,3])
y=np.array([2,1,5])
b=x[x>y]#x比y大的
c=x[~(x>y)]#x比y小的
print(b)
print(c)

[2]
[1 3]

数组运算函数

max() 求最大值
min() 求最小值
mean() 求平均值
ptp() 求峰峰值
argmax() 求最大值的索引号
argmin() 求最小值的索引号
sum() 求和
prod() 求积
cumsum() 级联相加
cumprod() 级联相乘
var() 求方差
std() 求标准差
conj() 求共轭
sort() 排序(默认由小到大)
argsort() 获得排序后各个值对应在原数组中的索引
tolist() 转成列表
tostring() 转成字符(按bit对应的ASCII码转)
tofile() 将数组存成数据文件
以max()函数为例:
其他基本一致
**,与matlab基本一致**

import numpy as np
a=np.array([[1,2,3], [2,5,6]])
print(a)
print(a.max(axis=0))#求每一列的的最大值,输出一个向量
print(a.max(axis=1))#求每一行的最大值,输出一个向量
print(a.max())#求全部点的最大值
print(a.argsort())

[[1 2 3]
 [2 5 6]]
[2 5 6]
[3 6]
6
[[0 1 2]
 [0 1 2]]
  • 数据存成文件
a.tofile('E:/t1.txt')#tofile()默认按照bit位存成数据文件的
a.tofile('E:/t2.txt',sep=',')#按照‘所见即所得’的方式存成文本

-从文件读取数据

import numpy as np
a=np.array([[1,2,3], [2,5,6]])
ind=np.fromfile('E:/t2.txt',sep=',')
print(ind)#读取出来的数据为float类型

,读取数据文件时建议最好要设置dtype参数以指明读入的数据格式

[1. 2. 3. 2. 5. 6.]
  • arange()函数
    和matlab产生向量的结果一致

数组常用内置矩阵

  1. np.ones() 产生全1序列
  2. np.zeros() 产生全0序列
  3. np.random.randn() 产生均值0、方差为1的高斯分布随机序列
  4. np.random.rand() 产生范围在[0,1]之间均匀分布的随机序列
  5. np.eye() 产生单位对角阵
import numpy as np
a=np.zeros([2,2])
b = np.random.rand(2,3)
print(a)
print(b)
[[0. 0.]
 [0. 0.]]
[[0.81114524 0.25122227 0.01547106]
 [0.0365475  0.37796225 0.83383327]]

数组常用数学公式

np.sin() 正弦
np.cos() 余弦
np.tan() 正切
np.arcsin() 反正弦
np.arccos() 反余弦
np.arctan() 反正切
np.sinh() 双曲正弦
np.cosh() 双曲余弦
np.tanh() 双曲正切
np.exp() 以e为底数的指数函数
np.log() 以e为底数的对数函数
np.log2() 以2为底数的对数函数
np.log10() 以10为底数的对数函数
np.round() 四舍五入取整
np.abs() 取绝对值

import numpy as np
x=np.array([1,2,3])
a=np.sin(x)
b=np.log10(x)
print(a)
print(b)

结果为:

[0.84147098 0.90929743 0.14112001]
[0.         0.30103    0.47712125]

数组逻辑运算

logical_and() #Array数组逻辑与
logical_not() #Array数组逻辑非
logical_or() # Array数组逻辑或
logical_xor() # Array数组逻辑异或
all() #数组各个元素的判断结果求个逻辑与
any()#数组各个元素的判断结果求个逻辑或

两个数组之间:
bitwise_and()#Array数组位与
bitwise_not() #Array数组位非
bitwise_or() #Array数组位或
bitwise_xor() #Array数组位异或

x=np.array([1,2,3])
y=np.array([2,1,5])
b=x[np.logical_and(x>=2,x<=3)]
c=np.all(x>1)
print(b)
print(c)
[2 3]
False

array数组高级科学计算方法

convolve() #卷积运算
fft.fft() #傅里叶变换
fft.ifft() #逆傅里叶变换
fft.fftshift() #对fft变换结果进行移位使零频移至中心
linalg.norm() #求范数

import numpy as np
x=np.array([1,2,3])
y=np.array([2,1,5])
b=np.convolve(x,y)
c=np.fft.fft(x)
print(b)
print(c)
[ 2  5 13 13 15]
[ 6. +0.j        -1.5+0.8660254j -1.5-0.8660254j]

Matrix矩阵

与Array不同的是:Matrix具有它独有的矩阵运算方法,主要有矩阵乘法、矩阵幂运算。其他加减,常用函数,比较函数都一致
linalg.eig() #求矩阵(方阵)的特征值与特征向量
linalg.det() #求矩阵(方阵)的行列式值
linalg.svd() #求矩阵的奇异值分解
linalg.qr() #求矩阵的QR分解
linalg.matrix_rank() #求矩阵的秩

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值