赞
踩
目录
数组属性:ndarray(数组)是存储单一数据类型的多维数组。
查看数据类型,可以直接查看或者使用nmpy.dtype函数查看
在使用array函数创建数组时,数组的数据类型默认是浮点型。自定义数组数据,则可以预先指定数据类型
生成给定上下范围的随机数,如创建一个最小值不低于2、最大值不高于10的2行5列数组
扩展库numpy是Python支持科学计算的一个很重要的库,常用语数据分析和科学计算领域,如sklearn、pandas、scipy等,numpy提供了强大的数组运算能力以及复杂的广播机制。本篇内容将介绍数组与矩阵及其相关运算。
基于Numpy的数据分析计算生态系统有:
NumPy SciPy Pandas Matplotlib Sckit-image statsmodels scikit-learn
Cython PyTables Numba SymPy NumExpr OpenCV astropy PySAL
BioPython GDAL......
功能介绍:
属性 | 说明 |
---|---|
ndim | 返回int。表示数组的维数 |
shape | 返回tuple。表示数组的尺寸,对于n行n列的矩阵,形状为(n,m) |
size | 返回int。表示数组的元素总数,等于数组形状的乘机 |
dtype | 返回data-type。描述数组中元素的类型 |
itemsize | 返回int。表示数组的每个元素的大小(以字节为单位) |
numpy.array(object, dtype=None, copy=True, order='K',subok=False, ndmin=0)
参数名称 | 说明 |
---|---|
object | 接收array。表示想要创建的数组。无默认 |
dtype | 接收data-array。表示数组所需的数据类型。如果未给定,则选择保存对象所需的最小类型。默认为None。 |
ndmin | 接收int。指定生成数组应该具有的最小维数。默认为None。 |
import numpy as np
- #例8.1:创建数组查看属性
- import numpy as np #导入NumPy库
-
- arr1 = np.array([1, 2, 3, 4]) #创建一维数组
- print('创建的数组为:', arr1)
-
- arr2 = np.array([[1, 2, 3, 4],[4, 5, 6, 7], [7, 8, 9, 10]]) #创建二维数组
- print('创建的数组为:\n', arr2)
-
- #查看数组结构
- print('数组维度为:', arr2.shape)
-
- # 查看数组类型
- print('数组类型为:', arr2.dtype)
-
- #查看数组元素个数
- print('数组元素个数为:', arr2.size)
-
- #查看数组每个元素大小
- print('数组每个元素大小为:', arr2.itemsize)
-
-
- arr2.shape = 4,3 #重新设置 shape
- print('重新设置 shape 后的 arr2 为:',arr2)
创建的数组为:
[[ 1 2 3 4]
[ 4 5 6 7]
[ 7 8 9 10]]
数组维度为:(3,4)
重新设置shape维度后的arr2为:
[[ 1 2 3]
[ 4 4 5]
[ 6 7 7]
[ 8 9 10]]
print(‘使用arange函数创建的数组为:\n’,np.arange(0,1,0.1))
print(‘使用linespace函数创建的数组为:\n’,np.linespace(0,1,12))
print(‘使用logspace函数创建的数组为:\n’,np.logspace(0,5,40))
print(‘使用zeros函数创建的数组为:\n’,np.zeros((2,3)))
print(‘使用eye函数创建的数组为:\n’,np.eye(5))
print(‘使用diag函数创建的数组为:\n’,np.diag([1,2,3,4]))
print(‘使用ones函数创建的数组为:\n’,np.ones((5,3)))
类型 | 描述 |
---|---|
bool | 用一位存储的布尔类型(值为TRUE或FALSE) |
inti | 由所在的平台决定其精度的整数(一般为int32或int64) |
int8 | 整数,范围为-128到127 |
int16 | 整数,范围为-32768到32767 |
int32 | 整数,范围为-2^31到2^32-1 |
...... | ...... |
- #例8.2:数组数据类型转换
- import numpy as np #导入NumPy库
-
- print('转换结果为:', np.float64(42)) #整型转换为浮点型
-
- print('转换结果为:', np.int8(42.0)) #浮点型转换为整型
-
- print('转换结果为:', np.bool(42)) #整型转换为布尔型
-
- print('转换结果为:', np.bool(0)) #整型转换为布尔型
-
- print('转换结果为:', np.float(True)) #布尔型转换为浮点型
-
- print('转换结果为:', np.float(False)) #布尔型转换为浮点型
do = np.dtype([("name", np.str_, 40), ("numitems", np.int64), ("price",np.float64)]) print('数据类型为:',df)
print('数据类型为:', df["name"]) print('数据类型为:', np.dtype(df["name"]))
itemz = np.array([("tomatoes", 42, 4.14), ("cabbages", 13, 1.72)], dtype=df) print('自定义数据为:',itemz)
print('生成的随即数组为:',np.random.random(100))
print('生成的随机数组为:\n',np.random.rand(10,5))
print('生成的随即数组为:\n',np.random.randn(10,5))
print('生成的随即数组为:',np.random.randint(2,10,size = [2,5]))
函数 | 说明 |
---|---|
seed | 确定随机数生成器的种子 |
permutation | 返回一个序列的随机排列或返回一个随机排列的范围 |
shuffle | 对一个序列进行随机排序 |
binomial | 产生二项分布的随机数 |
normal | 产生正态(高斯)分布的随机数 |
beta | 产生beta分布的随机数 |
chisquare | 产生卡方分布的随机数 |
gamma | 产生gamma分布的函数 |
uniform | 产生在[0,1]中均匀分布的函数 |
- #例8.4:一维数组索引
- import numpy as np #导入NumPy库
-
- arr = np.arange(10)
- print(arr)
- print('索引结果为:', arr[5]) #用整数作为下标可以获取数组中的某个元素
-
- print('索引结果为:', arr[3:5]) #用范围作为下标获取数组的一个切片,包括arr[3]不包括arr[5]
-
- print('索引结果为:', arr[:5]) #省略开始下标,表示从arr[0]开始
-
- print('索引结果为:', arr[-1]) #下标可以使用负数,-1表示从数组后往前数的第一个元素
-
- arr[2:4] = 100, 101
-
- print('索引结果为:', arr) #下标还可以用来修改元素的值
-
- #范围中的第三个参数表示步长,2表示隔一个元素取一个元素
- print('索引结果为:', arr[1:-1:2])
-
- print('索引结果为:', arr[5:1:-2]) #步长为负数时,开始下标必须大于结束下标
-
- #例8.5:二维数组索引
- import numpy as np #导入NumPy库
-
- arr = np.array([[1, 2, 3, 4, 5], [4, 5, 6, 7, 8], [7, 8, 9, 10, 11]])
- print('创建的二维数组为:', arr)
-
- print('索引结果为:', arr[0, 3:5]) #索引第0行中第3和4列的元素
-
- #索引第2和3行中第3~5列的元素
- print('索引结果为:', arr[1:, 2:])
-
- print('索引结果为:', arr[:, 2]) #索引第2列的元素
-
- #例8.6:二维数组索引2
- import numpy as np #导入NumPy库
-
- arr = np.array([[1, 2, 3, 4, 5], [4, 5, 6, 7, 8], [7, 8, 9, 10, 11]])
- #从两个序列的对应位置取出两个整数来组成下标:arr[0,1], arr[1,2], arr[2,3]
- print('索引结果为:', arr[[(0,1,2), (1,2,3)]])
-
- print('索引结果为:', arr[1:, (0,2,3)]) #索引第2、3行中第0、2、3列的元素
-
- mask = np.array([1,0,1], dtype=np.bool)
- print(mask)
- #mask是一个布尔数组,它索引第1、3行中第2列的元素
- print('索引结果为:', arr[mask, 2])
-
- #例8.7:变换数组形态
- import numpy as np #导入NumPy库
-
- arr = np.arange(12) #创建一维数组
- print('创建的一维数组为:', arr)
-
- print('新的一维数组为:', arr.reshape(3,4)) #设置数组的形状
-
- print('数组维度为:', arr.reshape(3,4).ndim) #查看数组维度
- print(arr)
-
- #ravel函数数组展平工作
- arr = np.arange(12).reshape(3, 4)
- print('创建的二维数组为:\n', arr)
-
- print('数组展平后为:', arr.ravel())
-
- #flatten函数数组展平工作
- print('数组展平为:', arr.flatten()) #横向展平
-
- print('数组展平为:', arr.flatten('F')) #纵向展平
-
- #例8.8:实现数组组合
- import numpy as np
- # hstack函数横向组合
- arr1 = np.arange(12).reshape(3,4)
- print('创建的数组1为:\n',arr1)
-
- arr2 = arr1*3
- print('创建的数组2为:\n',arr2)
- print('横向组合为:\n',np.hstack((arr1,arr2))) #hstack函数横向组合
-
- #使用vstack函数实现数组纵向组合
- print('纵向组合为:\n',np.vstack((arr1,arr2))) #vstack函数纵向组合
-
- # 使用concatenate函数实现数组组合
- print('横向组合为:\n',np.concatenate((arr1,arr2),axis = 1)) #concatenate函数横向组合
- print('纵向组合为:\n',np.concatenate((arr1,arr2),axis = 0)) #concatenate函数纵向组合
-
- # 使用hsplit函数实现数组横向分割
- arr = np.arange(16).reshape(4,4)
- print('创建的二维数组为:\n',arr)
- print('横向分割为:\n',np.hsplit(arr, 2)) #hsplit函数横向分割
-
- # vsplit函数实现数组纵向分割
- print('纵向分割为:\n',np.vsplit(arr, 2)) #vsplit函数纵向分割
-
- # split函数分割数组
- print('横向分割为:\n',np.split(arr, 2, axis=1)) #split函数横向分割
- print('纵向分割为:\n',np.split(arr, 2, axis=0)) #split函数纵向分割
-
- #例8.9:创建NumPy矩阵
- import numpy as np #导入NumPy库
-
- matr1 = np.mat("1 2 3;4 5 6;7 8 9") #使用分号隔开数据
- print('创建的矩阵为:\n', matr1)
-
- matr2 = np.matrix([[1, 2, 3], [4, 5, 6], [7, 8, 9]])
- print('创建的矩阵为:', matr2)
-
- arr1 = np.eye(3)
- print('创建的数组1为:\n', arr1)
-
- arr2 = 3*arr1
- print('创建的数组2为:\n', arr2)
-
- print('创建的矩阵为:\n', np.bmat("arr1 arr2; arr1 arr2"))
-
- print('创建的矩阵为:\n', np.bmat("arr1 arr2"))
-
- print('创建的矩阵为:\n', np.bmat("arr1; arr2"))
- #例8.10:矩阵运算
- import numpy as np #导入NumPy库
-
- matr1 = np.mat("1 2 3;4 5 6;7 8 9") #创建矩阵
- print('创建的矩阵为:', matr1)
-
- matr2 = matr1*3 #矩阵与数相乘
- print('创建的矩阵为:', matr2)
- print('矩阵相加结果为:', matr1+matr2) #矩阵相加
-
- print('矩阵相减结果为:', matr1-matr2) #矩阵相减
- print('矩阵相乘结果为:', matr1*matr2) #矩阵相乘
- print('矩阵对应元素相乘结果为:', np.multiply(matr1, matr2))
属性 | 说明 |
---|---|
T | 返回自身的转置 |
H | 返回自身的共轭转置 |
I | 返回自身的逆矩阵 |
A | 返回自身数据的2维数组的一个视图 |
- #例8.11:ufunc函数运算
- import numpy as np #导入NumPy库
-
- #四则运算
- 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) #数组幂运算
-
- #比较运算
- x = np.array([1,3,5])
- y = np.array([2,3,4])
- print('数组比较结果为:', x < y)
- print('数组比较结果为:', x > y)
- print('数组比较结果为:', x == y)
- print('数组比较结果为:', x >= y)
- print('数组比较结果为:', x <= y)
- print('数组比较结果为:', x != y)
-
- #逻辑运算
- print('数组逻辑运算结果为:', np.all(x == y)) #np.all()表示逻辑and
- print('数组逻辑运算结果为:', np.any(x == y)) #np.any()表示逻辑or
- #例8.12:一维数组的广播机制
- import numpy as np #导入NumPy库
-
- arr1 = np.array([[0,0,0],[1,1,1],[2,2,2],[3,3,3]])
- print('创建的数组1为:',arr1)
- print('数组1的shape为:',arr1.shape)
- arr2 = np.array([1,2,3])
-
- print('创建的数组2为:',arr2)
- print('数组2的shape为:',arr2.shape)
- print('数组相加结果为:',arr1 + arr2)
- #例8.13:二维数组的广播机制
- import numpy as np #导入NumPy库
-
- arr1 = np.array([[0,0,0],[1,1,1],[2,2,2],[3,3,3]])
- print('创建的数组1为:',arr1)
- print('数组1的shape为:',arr1.shape)
-
- arr2 = np.array([1,2,3,4]).reshape((4,1))
- print('创建的数组2为:',arr2)
- print('数组2的shape为:',arr2.shape)
-
- print('数组相加结果为:',arr1 + arr2)
- import numpy as np #导入NumPy
- n = 100
- dist = np.zeros([n, n])
- point = np.random.rand(n,2)
- for i in range(n):
- for j in range(n):
- dist[i, j] = np.sqrt(sum((point[i, :] - point[j, :])**2))
- print(dist)
以上便是我对numpy数组和矩阵运算的总结,感谢观看,码字不易,如果对你有帮助,点个赞就是给我最大的动力。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。