我是靠谱客的博主 呆萌身影,最近开发中收集的这篇文章主要介绍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的统计函数所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(37)

评论列表共有 0 条评论

立即
投稿
返回
顶部