1.什么事numpy?
Numpy 是用于数据科学计算的基础,不但能够完成科学计算任务,还能被用作高效地多维数据容器。用于存储和处理大型矩阵。
Python提供了一个array模块,和list不同,它直接保存数值,但是由于Python的array模块不支持多维,也没有各种运算函数。
Numpy 弥补了这一遗憾。Numpy提供了一种存储单一数据类型的多维数组——ndarray
2.ndarry属性
属性 | 说明 |
ndim | 返回int。表示数组的维度 |
shape | 返回tuple。表示数组的尺寸,对于n行m列的矩阵,形状为(n,m) |
size | 返回int。表示数组的元素总数,等于数组形状的乘积 |
dtype | 返回data-type。描述数组中元素的类型。 |
itemsize | 返回int。表示数组的每一个元素的大小(以字节为单位) |
3.数组的创建(创建一维或多维数组)
numpy.array(object,dtype=None,copy=True,order='K',subok=Flase,ndmin=0)
参数名称 | 说明 |
object | 接收array。表示想要创建的数组。无默认。 |
dtype | 接收data-type。表示数组所需的数据类型。如果未给定,则选择保存对象所需的最小类型。默认为None。 |
ndmin | 接收int。指定生成数组应该具有的最小维数。默认为None。 |
4.创建数组并查看数组属性
import numpy as np ##导入numpy库
arr1 = np.array([1,2,3,4]) ##创建一维数组
print("创建的数组为:",arr1)
输出结果:
创建的数组为:[1 2 3 4]
arr2 = np.array([[1,2,3,4],[4,5,6,7],[7,8,9,10]]) ##创建二维数组
print("数组维度为:"arr2.ndim) ##查看数组维度
print("数组形状为:",arr2.shape) ##查看数组结构
print("数组类型为:",arr2.dtype) ##查看数组类型
print("数组大小为:",arr2.size) ##查看数组大小
print("数组每个元素大小为:",arr2.itemsize) ##查看数组每个元素大小
输出结果:
数组维度为:2
数组形状为:(3,4)
数组类型为: int32
数组大小为:12
数组每个元素大小为:4
5.重新设置数组的shape属性
arr2.shape = 4,3 ###重新设置arr2数组的shape
print("重置shape后的arr2为:\n",arr2)
输出结果:
[[ 1 2 3]
[ 4 4 5]
[ 6 7 7]
[ 8 9 10]]
6.使用arange函数创建数组(通过设置开始值,终止值,步长来创建一维数组)
import numpy as np
## 参数1:开始 包含
## 参数2 截止 不包含
## 参数3 步长
arr1 = np.arange(1,10,2)
print("使用arange函数创建的数组为:\n",arr1)
输出结果:
使用arange函数创建的数组为:
[1 3 5 7 9]
7.使用linspace函数创建数组(设定开始值,终止值,元素个数)
import numpy as np
# ## 参数1 开始 ,包含
# ## 参数2 截止 ,包含
# ## 参数3 元素个数
arr1 = np.linspace(0,1,6)
print("使用linspace创建的数组为:\n",arr1)
输出结果为:
使用linspace创建的数组为:
[0. 0.2 0.4 0.6 0.8 1. ]
8.使用logspace 函数创建等比数列(生成(10^0~10^2)的 20 个等比数列)
import numpy as np
###参数1 以10的开始次方 开始,包含
###参数2 以10的结束次方 结束,包含
###参数3 生成数组个数
arr1 = np.logspace(0,2,20)
print("使用logspace函数创建的数组为:\n",arr1)
输出结果:
使用logspace函数创建的数组为:
[ 1. 1.27427499 1.62377674 2.06913808 2.6366509
3.35981829 4.2813324 5.45559478 6.95192796 8.8586679
11.28837892 14.38449888 18.32980711 23.35721469 29.76351442
37.92690191 48.32930239 61.58482111 78.47599704 100. ]
9.使用zeros函数创建数组
impory numpy as np
##参数 生成数组的shape
arr1 = np.zeros((2,3))
print("使用zeros函数创建的数组为:\n",arr1)
输出结果:
使用zeros函数创建的数组为:
[[0. 0. 0.]
[0. 0. 0.]]
10.使用eye函数创建数组
import numpy as np
###参数 生成对角都为1的数,里面参数是一个数,表示生成数组为几行几列
arr1 = np.eye(3)
print("使用eye函数创建的数组为:\n",arr1)
输出结果:
使用eye函数创建的数组为:
[[1. 0. 0.]
[0. 1. 0.]
[0. 0. 1.]]
11.使用diag函数创建数组
import numpy as np
## 生成指定对角元素的对角数组,传入参数多大就生成几行几列
arr1 = np.diag([1,2,3,4])
print("使用diag创建的数组为:\n",arr1)
输出结果:
使用diag创建的数组为:
[[1 0 0 0]
[0 2 0 0]
[0 0 3 0]
[0 0 0 4]]
12.使用ones函数创建数组:创建的元素都为1
import numpy as np
##参数 生成数组的shape 全部元素都为1
arr1 = np.ones((3,5))
print("使用ones函数创建的数组为:\n",arr1)
输出结果:
使用ones函数创建的数组为:
[[1. 1. 1. 1. 1.]
[1. 1. 1. 1. 1.]
[1. 1. 1. 1. 1.]]
13. random函数生成随机数
import numpy as np
###生成指定参数个0~1 之间的数组 包含0 不包含1
arr1 = np.random.random(4)
print("arr1:\n",arr1)
输出结果:
arr1:
[0.09890543 0.5631192 0.09417896 0.1554208 ]
##################################################################
###生成均匀分布的数组,里面参数为几行几列
arr2 = np.random.rand(6,2)
print("arr2:\n",arr2)
输出结果:
arr2:
[[0.60073526 0.40737395]
[0.49359336 0.48587344]
[0.58353272 0.7918001 ]
[0.06910529 0.6781642 ]
[0.47421911 0.51124696]
[0.75780799 0.56415203]]
#################################################
####符合正太分布的数组
## u 均值 反映的正太分布对称线的位置
## a 标准差 反映数据的离散程度
## a 越大,越离散,图形越平缓
## a 越小,越密集,图形越陡峭
arr3 = np.random.randn((10,2))
print("arr3:\n",arr3)
输出结果:
arr3:
[[ 0.47601861 -0.53283289]
[ 0.36274619 -0.27527158]
[-0.00463033 -0.55391689]
[-1.6325087 -1.56417882]
[-1.25892241 -0.32421935]
[ 1.09829841 0.23137011]
[-0.35076178 0.82404005]
[ 0.87361673 1.64870962]
[ 0.21036936 1.09305065]
[ 1.92894355 -1.80894203]]
#################################################
arr4 = np.random.randint(2,10,size=[3,4])
## random.randint(a, b),用于生成一个指定范围内的整数。
## 其中参数 a 是下限,参数 b 是上限,生成的随机数 n: a <= n <= b
print("arr4:\n",arr4)
输出结果:
arr4:
[[7 3 2 9]
[4 8 4 2]
[4 7 3 6]]
14.数组的数据类型转换
print(np.float64(42)) ## 整型转换为浮点型
print(np.int8(42.0)) ## 浮点型转换为整型
print(np.bool(42)) ## 整型转换为布尔型
print(np.bool(0))
print(np.float(True)) ## 布尔型转换为浮点型
print(np.int(False)) ## 布尔型转换为整型
输出结果:
42.0
42
True
False
1.0
0
15.自定义数据类型
import numpy as np
df = np.dtype([("name",np.str_,32),("weight",np.float64),("height",np.float64)])
arr1 = np.array([("zs",180,75),("ls",170,60),("ww",185,80)],dtype=df)
print(arr1)
print(arr1.dtype)
输出结果:
[('zs', 180., 75.) ('ls', 170., 60.) ('ww', 185., 80.)]
[('name', '
16.数组的索引
### 一维数组的索引
##创建一个一维数组
arr = np.arange(10)
print("arr:",arr)
### 一维索引
##取5
print(arr[5])
##取5,6,7
print(arr[5:8])
##多维数组的索引
arr = np.array([[1,2,3,4],[2,3,4,5],[3,4,5,6],[4,5,6,7]])
print(arr)
print("取前两行所有列",arr[:2,:])
print("取第三行的4,5",arr[2,1:3])
print("取第一行,第三行的的第一列和最后一列",arr[::2,::3])
17.改变数组形状
arr1 = np.arange(10) ## 创建一维数组
print(arr1)
输出结果:
[0 1 2 3 4 5 6 7 8 9]
#############################################
##改变数组形状
arr_new = arr1.reshape(2,5)
print(arr_new)
输出结果:
[[0 1 2 3 4]
[5 6 7 8 9]]
18.使用ravel函数f和latten函数展平数组
arr1 = np.arange(9).reshape(3,3)
print(arr1)
输出结果:
[[0 1 2]
[3 4 5]
[6 7 8]]
arr_new = arr1.reval()
print("展平的数组结果为:\n"arr_new)
输出结果:
展平的数组结果为:
[0 1 2 3 4 5 6 7 8]
########################################################
### 通过flatten展平数组
### 默认参数为C,按行展开,F为按列展开
arr_new = arr.flatten("F")
print(arr_new)
输出结果:
[0 1 2 3 4 5 6 7 8]
19.组合数组
import numpy as np
arr1 = np.arange(6).reshape(2,3)
arr2 = np.array([[1,2,3],[4,5,6]])
print('arr1:\n',arr1)
print('arr2:\n',arr2)
输出结果:
arr1:
[[0 1 2]
[3 4 5]]
arr2:
[[1 2 3]
[4 5 6]]
#######################################
### hstack 数组横向拼接,增加列
arr_new = np.hstack((arr1,arr2))
print('arr_new:\n',arr_new)
输出结果:
arr_new:
[[0 1 2 1 2 3]
[3 4 5 4 5 6]]
##########################################
###vstack 数组纵向拼接,增加行
arr_new = np.vstack((arr1,arr2))
print("arr_new:\n",arr_new)
输出结果:
arr_new:
[[0 1 2]
[3 4 5]
[1 2 3]
[4 5 6]]
############################################
####concatenate axis=1 数组横向组合
arr_new = np.concatenate((arr1,arr2),axis=1)
print(arr_new)
输出结果:
[[0 1 2 1 2 3]
[3 4 5 4 5 6]]
###############################################
### concatenate ,axis=0 数组纵向组合
# arr_new = np.concatenate((arr1,arr2),axis=0)
# print(arr_new)
输出结果:
[[0 1 2]
[3 4 5]
[1 2 3]
[4 5 6]]
### 拼接过程中:维度
## 横向拼接,行一致一致
## 纵向拼接,列一致
20.切割数组
import numpy as np
arr = np.arange(16).reshape(4,4)
print("arr:\n",arr)
输出结果:
arr:
[[ 0 1 2 3]
[ 4 5 6 7]
[ 8 9 10 11]
[12 13 14 15]]
#### hsplit 横向拆分
arr_new = np.hsplit(arr,2)
##或者
arr_new = np.split(arr,2,axis=1)
print(arr_new)
输出结果:
[array([[ 0, 1],
[ 4, 5],
[ 8, 9],
[12, 13]]), array([[ 2, 3],
[ 6, 7],
[10, 11],
[14, 15]])]
#### vsplit 纵向拆分
arr_new = np.hsplit(arr,2)
### 或者
arr_new = np.split(arr,2,axis=0)
print(arr_new)
输出结果:
[array([[0, 1, 2, 3],
[4, 5, 6, 7]]), array([[ 8, 9, 10, 11],
[12, 13, 14, 15]])]