python数值计算工具Numpy

数组创建与操作

数组创建

import numpy as np
arr1=np.array((1,2,4,5,7,7))
arr2=np.array(((1,3,4),(2,45,56),(12,34,90)))
print('一维数组:\n',arr1)
print('二维数组:\n',arr2)
#result
一维数组:
 [1 2 4 5 7 7]
二维数组:#主要有浮点型,所有的额=数据都会变成浮点型来保持数据的同质性
 [[ 1.   3.   4. ]
 [ 2.1 45.  56. ]
 [12.  34.  90. ]]

数组元素的获取

通过索引

print(arr1[1])
print(arr1[[0,2]])#注意两个索引时候的形式
print(arr2[0:2])#左开右闭,打印第1、2行
print(arr2[1:2,0:2])打印第2行与第12列的交叉元素
#result
2
[1 4]
[[ 1.   3.   4. ]
 [ 2.1 45.  56. ]]
[[ 2.1 45. ]]

通过函数#通过索引不能任意选取行和列
ix_函数

print(arr2[np.ix_([0,1],[0,1])])#打印第1、2行,第1、2列的交叉元素
#result
[[ 1.   3. ]
 [ 2.1 45. ]]

数组的常用属性

可以通过numpy中的genfromtxt函数读取外部文本文件数据,文本文件主要为csv文件和txt文件。

np.genfromtxt(fname,dtype=<class 'float'>,comments='#',delimiter=None,skip_header=0,skip_footer=0,converters=None,missing_values=None,filling_values=None,usecols=None)
fname:指定需要读入的文件路径
dtype:指定读入的文件数据类型,默认为浮点型,如果数据集中含有字符型数据,必须指定为str
comments:指定注释符,默认为#,行首有#则忽略这些行的读入
delimiter:指定数据集的列分隔符
skip_header:是否跳过数据集的首行,默认不跳过
skip_footer:是否跳过数据集的脚注,默认不跳过
converters:将指定列的数据转换成其他数值
miss_values:指定缺失值的标记
filling_values:指定缺失值的填充值
usecols:指定需要读入哪些列
names:为读入数据的列设置列名称

```python
stu_score=np.genfromtxt(fname=r'C:\原U盘\交大\python可视化\第4章 Python数值计算工具--Numpy\stu_socre.txt',delimiter='\t',skip_header=1)
print(type(stu_score))#查看数据类型结构
print(stu_score.ndim)#查看数据维数
print(stu_score.shape)#查看数据行列数
print(stu_score.dtype)#查看数据类型
print(stu_score.size)#查看元素个数

数组的形状处理

reshape:reshape只是返回改变形状后的预览,但未改变数组的形状
resize:resize不会返回预览,而是会直接改变数组的形状
ravel、flatten、reshape可将多维数组降为一维数组,ravel与reshape返回的是视图,通过视图的修改会影响到原来数组,flatten返回的是复制,对复制进行修改,不影响原数组。

arr3=np.array([[1,3,4],[2,4,6],[3,6,8],[12,7,9],[2,4,5],[24,5,8]])
arr3=np.array([[1,3,4],[2,4,6],[3,6,8],[12,7,9],[2,4,5],[24,5,8]])
print('使用reshape改变形状后:\n',arr3.reshape(3,6))
print('重新打印arr3:\n',arr3)
print('使用resize改变形状后:\n',arr3.resize(3,6))
print('重新打印arr3:\n',arr3)
#result
使用reshape改变形状后:
 [[ 1  3  4  2  4  6]
 [ 3  6  8 12  7  9]
 [ 2  4  5 24  5  8]]
重新打印arr3:
 [[ 1  3  4]
 [ 2  4  6]
 [ 3  6  8]
 [12  7  9]
 [ 2  4  5]
 [24  5  8]]
使用resize改变形状后:
 None
重新打印arr3:
 [[ 1  3  4  2  4  6]
 [ 3  6  8 12  7  9]
 [ 2  4  5 24  5  8]]
arr3=np.array([[1,3,4],[2,4,6],[3,6,8]])
print('使用ravel函数:\n',arr3.ravel(),arr3.ravel(order='F'))#默认情况下,优先按照数组的行顺序,逐个将元素降至一维,如果按照原始数组的列顺序,将数组降为一维的话,需要设置order参数为F
print('使用flatten函数:\n',arr3.flatten(),arr3.flatten(order='F'))
print('使用reshape函数:\n',arr3.reshape(-1),arr3.reshape(-1,order='F'))
使用ravel函数:
 [1 3 4 2 4 6 3 6 8] [1 2 3 3 4 6 4 6 8]
使用flatten函数:
 [1 3 4 2 4 6 3 6 8] [1 2 3 3 4 6 4 6 8]
使用reshape函数:
 [1 3 4 2 4 6 3 6 8] [1 2 3 3 4 6 4 6 8]

vstack及row_stack:用于垂直方向(纵向)的数组堆叠
hstack及colum_stack:用于水平横向(横向)的数组堆叠

arr3=np.array([[1,3,4],[2,4,6],[3,6,8]])
arr4=np.array([1,4,89])
arr5=np.row_stack([arr3,arr4])
print(arr5)
arr6=np.array([[1],[3],[5]])#虽然arr3看起来像3×3的,但是仅仅是3个1×3的组合,所以要横着加进去还是要维度匹配,即横着是1维的
print(np.hstack([arr3,arr6]))
#result
垂直方向加:
 [[ 1  3  4]
 [ 2  4  6]
 [ 3  6  8]
 [ 1  4 89]]
水平方向加:
 [[1 3 4 1]
 [2 4 6 3]
 [3 6 8 5]]

四则运算

+、-、*、/、%、//、***后面三个表示余数、整除、指数

import numpy as np
arr1=np.array([[1,2,3],[3,6,8],[4,6,9]])
arr2=np.array([[5,6,4],[2,5,9],[2,5,2]])
print(arr1+arr2)~np.add(arr1,arr2)
print(arr1-arr2)~np.subtract(arr1,arr2)
print(arr1*arr2)~np.multiply(arr1,arr2)
print(arr1/arr2)~np.divide(arr1,arr2)
print(arr1%arr2)~np.fomd(arr1,arr2)
print(arr1//arr2)~np.modf(arr1//arr2)
print(arr1**arr2)~np.power(arr1,arr2)

比较运算

>:np.greater(arr1,arr2)
≥:np.greater_equal(arr1,arr2)
<:np.less(arr1,arr2)
≤:np.less_equal(arr1,arr2)
==:np.equal(arr1,arr2)
!=:np.not_equal(arr1,arr2)

取子集
arr1=np.array([[1,2,3],[3,6,8],[4,6,9]])
arr2=np.array([[5,6,4],[2,5,9],[2,5,2]])
print('取出arr1中比arr2大的数:',arr1[arr1>arr2])
print('取出arr1中比4大的数:',arr1[arr1>4])
result
取出arr1中比arr2大的数: [3 6 4 6 9]
取出arr1中比4大的数: [6 8 6 9]
判断操作
arr1=np.array([[1,2,3],[3,6,8],[4,6,9]])
arr2=np.array([[5,6,4],[2,5,9],[2,5,2]])
print('把arr1中比4大的数改成4,否则不变:\n',np.where(arr1>4,4,arr1))
print('把arr1中比4大的数改成1,否则变成0:\n',np.where(arr1>4,1,0))
把arr1中比4大的数改成4,否则不变:
 [[1 2 3]
 [3 4 4]
 [4 4 4]]
把arr1中比4大的数改成1,否则变成0[[0 0 0]
 [0 1 1]
 [0 1 1]]

常用的数学和统计函数

在这里插入图片描述
在这里插入图片描述

arr2=np.array([[5,6,4],[2,5,9],[2,5,2]])
print(arr2)
print(np.sum(arr2,axis=0))#axis=0表示按垂直方向计算
print(np.sum(arr2,axis=1))#axis=0表示按水平方向计算

线性代数相关运算

在这里插入图片描述

矩阵乘法
import numpy as np
arr1=np.array([[1,2,3],[2,21,12]])
arr2=np.array([[1,4,10,2],[2,45,89,67],[1,5,0,2]])
print(np.dot(arr1,arr2))
#result
[[   8  109  188  142]
 [  56 1013 1889 1435]]

diag函数应用

arr1=np.arange(16).reshape(4,-1)
print('方阵是:\n',arr1)
print('取出方阵的对角线元素:\n',np.diag(arr1))
print('用下列数作对角线元素来构造方阵:\n',np.diag([1,2,3,4]))
#result
方阵是:
 [[ 0  1  2  3]
 [ 4  5  6  7]
 [ 8  9 10 11]
 [12 13 14 15]]
取出方阵的对角线元素:
 [ 0  5 10 15]
用下列数作对角线元素来构造方阵:
 [[1 0 0 0]
 [0 2 0 0]
 [0 0 3 0]
 [0 0 0 4]]
特征根与特征向量
arr2=np.array([[1,4,10],[2,45,89],[1,5,0]])
print('计算出下列矩阵的特征根和特征向量:\n',arr2)
print('arr2的特征根和特征向量是:\n',np.linalg.eig(arr2))
#result
计算出下列矩阵的特征根和特征向量:
 [[ 1  4 10]
 [ 2 45 89]
 [ 1  5  0]]
arr2的特征根和特征向量是:
 (array([53.64010158,  0.95247092, -8.59257249]), array([[-0.09319987, -0.98070401, -0.18141752],
       [-0.99118784,  0.18307857, -0.84065162],
       [-0.09412993, -0.06857023,  0.51028672]]))

多元一次方程的求解
求解:
3x+2y+z=39
2x+3y+z=34
x+2y+3z=26

A=np.array([[3,2,1],[2,3,1],[1,2,3]])
b=np.array([39,34,26])
print('AX=b的求解如下:\n',np.linalg.solve(A,b))

伪随机数的生成
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值