我是靠谱客的博主 呆萌身影,最近开发中收集的这篇文章主要介绍Python科学计算--NumPy的数组对象ndarray1. NumPy的引用2. ndarray对象的属性3. ndarray数组的元素类型4. ndarray数组的创建5. ndarray数组的变换6. ndarray数组的操作7. ndarray数组的运算8. numPy的统计函数,觉得挺不错的,现在分享给大家,希望可以做个参考。
概述
NumPy是一个开源的Python科学计算基础库,包含:
- 一个强大的N维数组对象 ndarray
- 广播功能函数
- 整合C/C++/Fortran代码的工具
- 线性代数、傅里叶变换、随机数生成等功能
NumPy是SciPy、Pandas等数据处理或科学计算库的基础
Python已有列表类型,为什么需要一个数组对象?
- 数组可以去掉元素间运算所需的循环,使一维向量更像单个数据
- 设置专门的数组对象,经过优化,可以提升这类应用的运算速度
- 数组对象采用相同的数据类型,有助于节省运算和存储空间
ndarray是一个多为数组对象,有两部分构成:
- 实际的数据
- 描述这些数据的元数据(数据维度、数据类型等)
ndarray数组一般要求所有数组元素类型相同(同质),数组下标从0开始
1. NumPy的引用
import numpy as np
尽管别名可以省略和更改,建议使用上述约定的别名
2. ndarray对象的属性
import numpy as np
a = np.array([[0,1,2,3,4],[9,8,7,6,5]])
a.ndim
Out[3]: 2
a.shape
Out[4]: (2, 5)
a.size
Out[5]: 10
a.dtype
Out[6]: dtype('int32')
a.itemsize
Out[7]: 4
3. ndarray数组的元素类型
4. ndarray数组的创建
4.1 从Python中的列表、元组等类型创建ndarray数组
x = np.array(list/tuple)
x = np.array(list/tuple, dtype=np.float32)
当np.array()不指定dtype时,NumPy将根据数据情况关联一个dtype类型
x =np.array([0,1,2,3])
#从列表类型创建
print(x)
[0 1 2 3]
x = np.array((4,5,6,7))
#从元组类型创建
print(x)
[4 5 6 7]
x =np.array([[1,2],[9,8],(0.1,0.2)])
#从列表和元组混合类型创建
print(x)
[[ 1.
2. ]
[ 9.
8. ]
[ 0.1
0.2]]
4.2 使用NumPy中函数创建ndarray数组
如:arange, ones, zeros等
np.arange(10)
Out[14]: array([0, 1, 2, 3, 4, 5, 6, 7, 8, 9])
np.ones((3,6))
Out[15]:
array([[ 1.,
1.,
1.,
1.,
1.,
1.],
[ 1.,
1.,
1.,
1.,
1.,
1.],
[ 1.,
1.,
1.,
1.,
1.,
1.]])
np.zeros((3,6),dtype = np.int32)
Out[16]:
array([[0, 0, 0, 0, 0, 0],
[0, 0, 0, 0, 0, 0],
[0, 0, 0, 0, 0, 0]])
np.eye(5)
Out[17]:
array([[ 1.,
0.,
0.,
0.,
0.],
[ 0.,
1.,
0.,
0.,
0.],
[ 0.,
0.,
1.,
0.,
0.],
[ 0.,
0.,
0.,
1.,
0.],
[ 0.,
0.,
0.,
0.,
1.]])
x = np.ones((2,3,4))
print(x)
[[[ 1.
1.
1.
1.]
[ 1.
1.
1.
1.]
[ 1.
1.
1.
1.]]
[[ 1.
1.
1.
1.]
[ 1.
1.
1.
1.]
[ 1.
1.
1.
1.]]]
x.shape
Out[20]: (2, 3, 4)
a = np.linspace(1,10,4)
a
Out[22]: array([
1.,
4.,
7.,
10.])
b = np.linspace(1,10,4,endpoint=False)
b
Out[24]: array([ 1.
,
3.25,
5.5 ,
7.75])
c = np.concatenate((a,b))
c
Out[26]: array([
1.
,
4.
,
7.
,
10.
,
1.
,
3.25,
5.5 ,
7.75])
5. ndarray数组的变换
对于创建后的ndarray数组,可以对其进行维度变换和元素类型变换
5.1 ndarray数组的维度变换
a = np.ones((2,3,4), dtype=np.int32)
a.reshape((3,8))
Out[28]:
array([[1, 1, 1, ..., 1, 1, 1],
[1, 1, 1, ..., 1, 1, 1],
[1, 1, 1, ..., 1, 1, 1]])
a
Out[29]:
array([[[1, 1, 1, 1],
[1, 1, 1, 1],
[1, 1, 1, 1]],
[[1, 1, 1, 1],
[1, 1, 1, 1],
[1, 1, 1, 1]]])
a.resize((3,8))
a
Out[31]:
array([[1, 1, 1, ..., 1, 1, 1],
[1, 1, 1, ..., 1, 1, 1],
[1, 1, 1, ..., 1, 1, 1]])
a.flatten()
Out[32]: array([1, 1, 1, ..., 1, 1, 1])
a
Out[33]:
array([[1, 1, 1, ..., 1, 1, 1],
[1, 1, 1, ..., 1, 1, 1],
[1, 1, 1, ..., 1, 1, 1]])
b = a.flatten()
b
Out[35]: array([1, 1, 1, ..., 1, 1, 1])
5.2 ndarray数组的类型变换
new_a = a.astype(new_type)
a
Out[37]:
array([[[1, 1, 1, 1],
[1, 1, 1, 1],
[1, 1, 1, 1]],
[[1, 1, 1, 1],
[1, 1, 1, 1],
[1, 1, 1, 1]]])
b = a.astype(np.float)
b
Out[39]:
array([[[ 1.,
1.,
1.,
1.],
[ 1.,
1.,
1.,
1.],
[ 1.,
1.,
1.,
1.]],
[[ 1.,
1.,
1.,
1.],
[ 1.,
1.,
1.,
1.],
[ 1.,
1.,
1.,
1.]]])
astype()方法一定会创建新的数组(原始数据的一个拷贝),即使两个类型一致
5.3 ndarray数组向列表类型转换
ndarray数组向列表类型转换
a = np.full((2,3,4),25,dtype=np.int32)
a.tolist()
Out[41]:
[[[25, 25, 25, 25], [25, 25, 25, 25], [25, 25, 25, 25]],
[[25, 25, 25, 25], [25, 25, 25, 25], [25, 25, 25, 25]]]
6. ndarray数组的操作
索引:获取数组中特定位置元素的过程
切片:获取数组元素自己的过程
6.1 一维数组的索引和切片
与Python的列表类似
a = np.array([9,8,7,6,5])
a[2]
Out[43]: 7
a[1:4:2]
#起始编号:终止编号(不含):步长,三元素冒号分割
Out[44]: array([8, 6])
#编号0开始从左递增,或-1开始从右递减
6.2 多维数组的索引
a = np.arange(24).reshape((2,3,4))
a
Out[46]:
array([[[ 0,
1,
2,
3],
[ 4,
5,
6,
7],
[ 8,
9, 10, 11]],
[[12, 13, 14, 15],
[16, 17, 18, 19],
[20, 21, 22, 23]]])
a[1,2,3]
Out[47]: 23
a[0,1,2]
Out[48]: 6
a[-1,-2,-3]
#每个维度一个索引值,逗号分割
Out[49]: 17
6.3 多维数组的切片
a = np.arange(24).reshape((2,3,4))
a
Out[51]:
array([[[ 0,
1,
2,
3],
[ 4,
5,
6,
7],
[ 8,
9, 10, 11]],
[[12, 13, 14, 15],
[16, 17, 18, 19],
[20, 21, 22, 23]]])
a[:,1,-3]
#选取一个维度用
Out[52]: array([ 5, 17])
a[:,1:3,:]
#每个维度切片方法与一维数组相同
Out[53]:
array([[[ 4,
5,
6,
7],
[ 8,
9, 10, 11]],
[[16, 17, 18, 19],
[20, 21, 22, 23]]])
a[:,:,::2]
每个维度可以使用步长跳跃切片
Out[54]:
array([[[ 0,
2],
[ 4,
6],
[ 8, 10]],
[[12, 14],
[16, 18],
[20, 22]]])
7. ndarray数组的运算
7.1 数组与标量之间的运算
数组与标量之间的运算作用于数组的每一个元素
a = np.arange(24).reshape((2,3,4))
a
Out[56]:
array([[[ 0,
1,
2,
3],
[ 4,
5,
6,
7],
[ 8,
9, 10, 11]],
[[12, 13, 14, 15],
[16, 17, 18, 19],
[20, 21, 22, 23]]])
a.mean()
Out[57]: 11.5
a = a/a.mean()
#计算a与元素平均值的商
a
Out[59]:
array([[[ 0.
,
0.08695652,
0.17391304,
0.26086957],
[ 0.34782609,
0.43478261,
0.52173913,
0.60869565],
[ 0.69565217,
0.7826087 ,
0.86956522,
0.95652174]],
[[ 1.04347826,
1.13043478,
1.2173913 ,
1.30434783],
[ 1.39130435,
1.47826087,
1.56521739,
1.65217391],
[ 1.73913043,
1.82608696,
1.91304348,
2.
]]])
7.2 NumPy一元函数
a = np.arange(24).reshape((2,3,4))
np.square(a)
Out[61]:
array([[[
0,
1,
4,
9],
[ 16,
25,
36,
49],
[ 64,
81, 100, 121]],
#注意数组是否被真实改变
[[144, 169, 196, 225],
[256, 289, 324, 361],
[400, 441, 484, 529]]], dtype=int32)
a = np.sqrt(a)
a
Out[63]:
array([[[ 0.
,
1.
,
1.41421356,
1.73205081],
[ 2.
,
2.23606798,
2.44948974,
2.64575131],
[ 2.82842712,
3.
,
3.16227766,
3.31662479]],
[[ 3.46410162,
3.60555128,
3.74165739,
3.87298335],
[ 4.
,
4.12310563,
4.24264069,
4.35889894],
[ 4.47213595,
4.58257569,
4.69041576,
4.79583152]]])
np.modf(a)
Out[64]:
(array([[[ 0.
,
0.
,
0.41421356,
0.73205081],
[ 0.
,
0.23606798,
0.44948974,
0.64575131],
[ 0.82842712,
0.
,
0.16227766,
0.31662479]],
[[ 0.46410162,
0.60555128,
0.74165739,
0.87298335],
[ 0.
,
0.12310563,
0.24264069,
0.35889894],
[ 0.47213595,
0.58257569,
0.69041576,
0.79583152]]]),
array([[[ 0.,
1.,
1.,
1.],
[ 2.,
2.,
2.,
2.],
[ 2.,
3.,
3.,
3.]],
[[ 3.,
3.,
3.,
3.],
[ 4.,
4.,
4.,
4.],
[ 4.,
4.,
4.,
4.]]]))
7.3 NumPy二元函数
a = np.arange(24).reshape((2,3,4))
b = np.sqrt(a)
a
Out[72]:
array([[[ 0,
1,
2,
3],
[ 4,
5,
6,
7],
[ 8,
9, 10, 11]],
[[12, 13, 14, 15],
[16, 17, 18, 19],
[20, 21, 22, 23]]])
b
Out[73]:
array([[[ 0.
,
1.
,
1.41421356,
1.73205081],
[ 2.
,
2.23606798,
2.44948974,
2.64575131],
[ 2.82842712,
3.
,
3.16227766,
3.31662479]],
[[ 3.46410162,
3.60555128,
3.74165739,
3.87298335],
[ 4.
,
4.12310563,
4.24264069,
4.35889894],
[ 4.47213595,
4.58257569,
4.69041576,
4.79583152]]])
np.maximum(a,b)
Out[74]:
array([[[
0.,
1.,
2.,
3.],
[
4.,
5.,
6.,
7.],
[
8.,
9.,
10.,
11.]],
[[ 12.,
13.,
14.,
15.],
[ 16.,
17.,
18.,
19.],
[ 20.,
21.,
22.,
23.]]])
a > b
Out[75]:
array([[[False, False,
True,
True],
[ True,
True,
True,
True],
[ True,
True,
True,
True]],
[[ True,
True,
True,
True],
[ True,
True,
True,
True],
[ True,
True,
True,
True]]], dtype=bool)
8. numPy的统计函数
import numpy as np
a = np.arange(15).reshape(3,5)
a
Out[13]:
array([[ 0,
1,
2,
3,
4],
[ 5,
6,
7,
8,
9],
[10, 11, 12, 13, 14]])
np.sum(a)
Out[14]: 105
np.mean(a)
Out[15]: 7.0
np.mean(a,axis=0)
Out[16]: array([ 5.,
6.,
7.,
8.,
9.])
np.mean(a,axis=1)
Out[17]: array([
2.,
7.,
12.])
np.average(a,axis=0,weights=[10,5,1])
Out[18]: array([ 2.1875,
3.1875,
4.1875,
5.1875,
6.1875])
np.std(a)
Out[19]: 4.3204937989385739
np.var(a)
Out[20]: 18.666666666666668
b = np.arange(15,0,-1).reshape(3,5)
b
Out[23]:
array([[15, 14, 13, 12, 11],
[10,
9,
8,
7,
6],
[ 5,
4,
3,
2,
1]])
np.max(b)
Out[24]: 15
np.argmax(b)
#扁平化后的下标
Out[25]: 0
np.unravel_index(np.argmax(b),b.shape)
#重塑成多维下标
Out[26]: (0, 0)
np.ptp(b)
Out[27]: 14
np.median(b)
Out[28]: 8.0
最后
以上就是呆萌身影为你收集整理的Python科学计算--NumPy的数组对象ndarray1. NumPy的引用2. ndarray对象的属性3. ndarray数组的元素类型4. ndarray数组的创建5. ndarray数组的变换6. ndarray数组的操作7. ndarray数组的运算8. numPy的统计函数的全部内容,希望文章能够帮你解决Python科学计算--NumPy的数组对象ndarray1. NumPy的引用2. ndarray对象的属性3. ndarray数组的元素类型4. ndarray数组的创建5. ndarray数组的变换6. ndarray数组的操作7. ndarray数组的运算8. numPy的统计函数所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复