一、介绍

  ——NumPy库是高性能科学计算和数据分析的基础包,它是Pandas及其它各种工具的基础

  ——NumPy里的ndarry多维数组对象,与列表的区别是:

    - 数组对象内的元素类型必须一样

    - 数组大小不可修改

  ——数组对象的常用属性:

    - T    数组的转置(在多维数组里,将列转成行,行转成列的操作)

    - dtype   数据元素的数据类型

    - size     数组元素的个数

    - ndim    数组的维数

    - shape  数组的维度大小

二、创建ndarray对象

  1、基本创建数组的方法:

import numpy as np #首先需要导入numpy库

#创建一维的narray对象
a1 = np.array([1,2,3,4,5]) #一个列表 #创建二维的narray对象
a2 = np.array([[1,2,3,4,5],[6,7,8,9,10]]) # 一个列表里套两个列表 #创建多维对象以次类推

    指定数据类型:dtype

a = np.array([2,23,4],dtype=np.int)
print(a.dtype)
# int 64
a = np.array([2,23,4],dtype=np.int32)
print(a.dtype)
# int32
a = np.array([2,23,4],dtype=np.float)
print(a.dtype)
# float64
a = np.array([2,23,4],dtype=np.float32)
print(a.dtype)
# float32

  自带的几种数组创建方法:

  1、zeros:创建全零数组

    a = np.zeros((3,4)) # 数据全为0,3行4列

  2、ones:创建全一数组, 同时也能指定这些特定数据的 dtype:

    a = np.ones((5,3),dtype = np.int) # 数据为1,5行3列

  3、empty:创建全空数组, 其实每个值都是接近于零的数:

    a = np.empty((2,2)) # 数据为empty,2行2列

  4、arange:传值创建连续数组:

a = np.arange(10) # 默认从0开始到10(不包括10),步长为1
print(a) # 返回 [0 1 2 3 4 5 6 7 8 9] a = np.arange(5,20,2) # 从5开始到20(不包括20),步长为2
print(a) # 返回 [ 5 7 9 11 13 15 17 19]

  5、reshape()函数通常结合arange()函数使用,改变数组的维度

# 将一维数组a变为3*4的数组
a=np.arange(12).reshape((3,4)) # 将a变回为一维数组
a.reshape((12,))

  6、linspace()函数跟arange()函数相似,前两个参数指定序列的开头和结尾,第三个参数指定将数组拆分成几个

np.linspace(0,10,5)
# array([ 0. , 2.5, 5. , 7.5, 10. ])

  7、random()函数使用随机数填充数组

# 生成一维数组
a = np.random.random(3) 
print(a)
# array([ 0.0092522 , 0.44961339, 0.85684498]) # 生成多维数组
a = np.random.random((3,3))
print(a)
# array([[ 0.50311642, 0.25961784, 0.30587642],
[ 0.55388356, 0.92739877, 0.26140058],
[ 0.63482092, 0.45938232, 0.84053653]])
# 生成的都是0~1范围的小数

三、数组基本操作

  1、算术运算符

    算术运算符可以用于数组和标量之间

>>> a=np.arange(4)
>>> a
array([0, 1, 2, 3]) >>> a+4
array([4, 5, 6, 7]) >>> a-4
array([-4, -3, -2, -1]) >>> a*4
array([ 0, 4, 8, 12]) >>> a/2
array([0, 0, 1, 1])

    还可以用于两个数组之间,这两个数组的元素位置必须相同,也就是具有相同的型

>>> a=np.arange(4)
>>> a
array([0, 1, 2, 3]) >>> b=np.arange(4,8)
>>> b
array([4, 5, 6, 7]) >>> a+b
array([ 4, 6, 8, 10]) >>> a-b
array([-4, -4, -4, -4]) >>> a*b
array([ 0, 5, 12, 21]) >>> a/b
array([0, 0, 0, 0]) #整数相除只取商
>>> a**2
array([ 0, 1, 4, 9])
>>> a%b    # 相除后取余数
array([ 0, 5, 12, 21])

  对于多维数组是一样适用的,

>>> A=np.arange(9).reshape((3,3))
>>> A
array([[0, 1, 2],
[3, 4, 5],
[6, 7, 8]]) >>> B=np.ones((3,3))
>>> B
array([[ 1., 1., 1.],
[ 1., 1., 1.],
[ 1., 1., 1.]]) >>> A*B
array([[ 0., 1., 2.],
[ 3., 4., 5.],
[ 6., 7., 8.]])

  2、数组的索引与切片

A = np.arange(3,15).reshape((3,4))
"""
array([[ 3, 4, 5, 6]
[ 7, 8, 9, 10]
[11, 12, 13, 14]])
在这样的二维数组中,每一行有从0开始的索引,每一行里的元素也有自己的索引,所以:
"""
print(A[2])
# [11 12 13 14] print(A[2,2])
# 13

    切片

# 数组也有类似列表的切片操作
A = np.arange(3,15).reshape((3,4))
"""
array([[ 3, 4, 5, 6]
[ 7, 8, 9, 10]
[11, 12, 13, 14]])
""" print(A[1,0:2])
# [7,8] print(A[0:2,1:3])
"""
array([[4, 5]
[8, 9]
[12, 13]])
"""

  Numpy 的 copy & deepcopy:

    = 的赋值方式会带有关联性:

import numpy as np

a = np.arange(4)
# array([0, 1, 2, 3]) b = a
c = a
d = b

    改变a的第一个值,bcd的第一个值也会同时改变。

a[0] = 11
print(a)
# array([11, 1, 2, 3])

    确认bcd是否与a相同。

print(b is a)  # True
print(c is a) # True
print(d is a) # True

    同样的,更改d的值,abc也会改变。

d[1:3] = [22, 33]   # array([11, 22, 33,  3])
print(a) # array([11, 22, 33, 3])
print(b) # array([11, 22, 33, 3])
print(c) # array([11, 22, 33, 3])

    copy()的赋值方式没有关联性

b = a.copy()    # deep copy
print(b) # array([11, 22, 33, 3])
a[3] = 44
print(a) # array([11, 22, 33, 44])
print(b) # array([11, 22, 33, 3])

  3、矩阵常用函数    

    1)最大值最小值

import numpy as np

a = np.array([[1,2,3],[4,5,6]])
print(a.max()) #获取整个矩阵的最大值 结果: 6
print(a.min()) #最小值,结果:1 # 可以指定关键字参数axis来获得行最大(小)值或列最大(小)值
# axis=0 行方向最大(小)值,即获得每列的最大(小)值
# axis=1 列方向最大(小)值,即获得每行的最大(小)值
# 例如 print(a.max(axis=0))
# 结果为 [4 5 6] print(a.max(axis=1))
# 结果为 [3 6] # 要想获得最大最小值元素所在的位置,可以通过argmax函数来获得
print(a.argmax(axis=1))
# 结果为 [2 2]

    2)平均值

import numpy as np

a = np.array([[1,2,3],[4,5,6]])
print(a.mean()) #结果为: 3.5 # 同样地,可以通过关键字axis参数指定沿哪个方向获取平均值
print(a.mean(axis=0)) # 结果 [ 2.5 3.5 4.5]
print(a.mean(axis=1)) # 结果 [ 2. 5.]

    3)方差:方差的函数为var(),方差函数var()相当于函数mean(abs(x - x.mean())**2),其中x为矩阵。

import numpy as np

a = np.array([[1,2,3],[4,5,6]])
print(a.var()) # 结果 2.91666666667 print(a.var(axis=0)) # 结果 [ 2.25 2.25 2.25]
print(a.var(axis=1)) # 结果 [ 0.66666667 0.66666667]

    4)标准差:标准差的函数为std(),std()相当于sqrt(mean(abs(x - x.mean())**2)),或相当于sqrt(x.var())

import numpy as np

a = np.array([[1,2,3],[4,5,6]])
print(a.std()) # 结果 1.70782512766 print(a.std(axis=0)) # 结果 [ 1.5 1.5 1.5]
print(a.std(axis=1)) # 结果 [ 0.81649658 0.81649658]

    5)中值:中值指的是将序列按大小顺序排列后,排在中间的那个值,如果有偶数个数,则是排在中间两个数的平均值。

import numpy as np
x = np.array([[1,2,3],[4,5,6]]) print(np.median(x)) # 对所有数取中值
# 结果 3.5 print(np.median(x,axis=0)) # 沿第一维方向取中值
# 结果 [ 2.5 3.5 4.5] print(np.median(x,axis=1)) # 沿第二维方向取中值
# 结果 [ 2. 5.]

    6)求和:矩阵求和的函数是sum(),可以对行,列,或整个矩阵求和

import numpy as np

a = np.array([[1,2,3],[4,5,6]])

print(a.sum())           # 对整个矩阵求和
# 结果 21 print(a.sum(axis=0)) # 对行方向求和
# 结果 [5 7 9] print(a.sum(axis=1)) # 对列方向求和
# 结果 [ 6 15]

    7)累积和:

import numpy as np

a = np.array([[1,2,3],[4,5,6]])

print(a.cumsum())            # 对整个矩阵求累积和
# 结果 [ 1 3 6 10 15 21] print(a.cumsum(axis=0)) # 对行方向求累积和
"""
结果[[1 2 4]
[5 7 9]]
""" print(a.cumsum(axis=1)) # 对列方向求累积和
"""
结果
[[ 1 3 6]
[ 4 9 15]]
"""

 

最新文章

  1. Python中函数、类、模块和包的调用
  2. 高级javascript---原型和原型继承
  3. 610K图纸打印新版增值税发票不完整的调整方法
  4. JAVAWEB学习
  5. 回车键转tab键解决方案一
  6. powerdesigner奇淫技
  7. Xrun 将 app 转化为 IPA
  8. lintcode :Longest Palindromic Substring 最长回文子串
  9. IE6、火狐不支持a:visited
  10. Android高斯模糊技术,实现毛玻璃效果(转)
  11. 设计一个程序能够将某一个目录下面的所有文件名打印出来---File类的使用
  12. 史上最强学生管理系统之ArrayList版
  13. Redis 5种数据结构
  14. SpringSecurity实现用户名密码登录(Token)
  15. MySQL 安装 用户管理 常用命令
  16. HTTPS实战之单向验证和双向验证
  17. log4j1 修改FileAppender解决当天的文件没有日期后缀
  18. oracle 报错归纳总结
  19. Office 365实现单点登录系列(3)—使用Azure AD Connect 进行目录同步
  20. phpqrcode生成动态二维码简单实例

热门文章

  1. tabbar
  2. CSS元素:clip属性作用说明
  3. hdu-1181
  4. 简单运行Lua代码
  5. CodeForces - 566D Restructuring Company 并查集的区间合并
  6. 树莓派也跑Docker和.NET Core
  7. Codeforces Round #377 (Div. 2)A,B,C,D【二分】
  8. php 发送邮件(实例)
  9. 卡马克揭开VR延迟背后的真相
  10. Unity3D研究院之IOS Android支持中文与本地文件的读取写