Python 数据科学 Numpy 基础

NumPy

Numpy 是 Python 数据科学计算的核心库,提供了高性能的多维数组对象及处理数组的工具。它是 Python 语言的一个扩展程序库,支持大量的维度数组与矩阵运算,此外也针对数组运算提供大量的数学函数库。

 使用以下语句导入 Numpy 库:

import numpy as np

NumPy 数组

创建数组

a = np.array([1,2,3])
b = np.array([(1.5,2,3), (4,5,6)], dtype = float)
c = np.array([[(1.5,2,3), (4,5,6)], [(3,2,1), (4,5,6)]], dtype = float)

初始化占位符

np.zeros((3,4)) # 创建值为0数组
np.ones((2,3,4),dtype=np.int16) # 创建值为1数组
d = np.arange(10,25,5) # 创建均匀间隔的数组(步进值)
np.linspace(0,2,9) # 创建均匀间隔的数组(样本数)
e = np.full((2,2),7) # 创建常数数组
f = np.eye(2) # 创建2x2单位矩阵
np.random.random((2,2)) # 创建随机值的数组
np.empty((3,2)) # 创建空数组

输入/输出

保存与载入磁盘上的文件

np.save('my_array', a)
np.savez('array.npz', a, b)
np.load('my_array.npy')

保存与载入文本文件

np.save('my_array', a)
np.savez('array.npz', a, b)
np.load('my_array.npy')

数据类型

np.int64 # 带符号的64位整数
np.float32 # 标准双精度浮点数
np.complex # 显示为128位浮点数的复数
np.bool # 布尔值:True值和False值
np.object # Python对象
np.string_ # 固定长度字符串
np.unicode_ # 固定长度Unicode

数组信息

a.shape # 数组形状,几行几列
len(a) # 数组长度
b.ndim # 几维数组
e.size # 数组有多少元素
b.dtype # 数据类型
b.dtype.name # 数据类型的名字
b.astype(int) # 数据类型转换

调用帮助

np.info(np.ndarray.dtype)

数组计算

算数运算

减法

g = a - b
g2 = np.subtract(a,b)
print(g)
print(g2)

#输出结果为

[[-0.5  0.   0. ]
 [-3.  -3.  -3. ]]
[[-0.5  0.   0. ]
 [-3.  -3.  -3. ]]

加法

b + a 
np.add(b,a)

#输出结果为

array([[2.5, 4. , 6. ],
       [5. , 7. , 9. ]])

除法

a / b
np.divide(a,b)

#输出结果为

array([[0.66666667, 1.        , 1.        ],
       [0.25      , 0.4       , 0.5       ]])

乘法

a * b
np.multiply(a,b)

#输出结果为

array([[ 1.5,  4. ,  9. ],
       [ 4. , 10. , 18. ]])

np.exp(b)

#输出结果为

array([[  4.48168907,   7.3890561 ,  20.08553692],
       [ 54.59815003, 148.4131591 , 403.42879349]])

平方根

 np.sqrt(b)

#输出结果为

array([[1.22474487, 1.41421356, 1.73205081],
       [2.        , 2.23606798, 2.44948974]])

正弦

np.sin(a)

#输出结果为

array([0.84147098, 0.90929743, 0.14112001])

余弦

np.cos(b)

#输出结果为

array([[ 0.0707372 , -0.41614684, -0.9899925 ],
       [-0.65364362,  0.28366219,  0.96017029]])

自然对数

np.log(a)

#输出结果为

array([0.        , 0.69314718, 1.09861229])

点积

e.dot(f)

#输出结果为

array([[7., 7.],
       [7., 7.]])

比较

a == b # 对比值
a < 2
np.array_equal(a, b) # 对比数组

#输出结果为

array([[False,  True,  True],
       [False, False, False]])
array([ True, False, False])
False

聚合函数

print('数组求和:', a.sum(), # 数组汇总
    '\n数组最小值:', a.min(), # 数组最小值
    '\n数组最大值,按行:', b.max(axis=0), # 数组最大值,按行
    '\n数组元素的累加值:', b.cumsum(axis=1), # 数组元素的累加值
    '\n平均数:', a.mean(), # 平均数
    '\n中位数:', np.median(b), # 中位数
    '\n相关系数:', np.corrcoef(a), # 相关系数
    '\n标准差:', np.std(b)) # 标准差

#输出结果为

数组求和: 6 
数组最小值: 1 
数组最大值,按行: [4. 5. 6.] 
数组元素的累加值: [[ 1.5  3.5  6.5]
 [ 4.   9.  15. ]] 
平均数: 2.0 
中位数: 3.5 
相关系数: 1.0 
标准差: 1.5920810978785667

数组复制

a = np.array([1,3,3])
h = a.view() # 使用同一数据创建数组视图
np.copy(a) # 创建数组的副本
h = a.copy() # 创建数组的深度拷贝
a = np.array([1,2,3])
h

#输出结果为

array([1, 3, 3])

数组排序

a.sort() # 数组排序
c.sort(axis=0) # 以轴为依据对数组排序

子集 、切片 、 索引

子集

a[2] # 选择索引2对应的值

#输出结果为

3

 

b[1,2] # 选择行1列2对应的值(等同于b[1][2]

#输出结果为

6.0

切片

a[0:2] # 选择索引为0与1对应的值

# 输出结果为

array([1, 2])

b[0:2,1] # 选择第1列中第0行、第1行的值

#输出结果为

array([ 2.,  5.])

b[:1] # 选择第0行的所有值(等同于b[0:1,:1]

#输出结果为

array( [[1.5, 2., 3.]])

c[1,...] # 等同于 [1,:,:]

#输出结果为

array( [[[ 3.,  2.,  1.],
          [ 4.,  5.,  6.]]])
a[ : :-1] # 反转数组a

#输出结果为

array([3, 2, 1])

条件索引

a[a<2] # 选择数组a中所有小于2的值

#输出结果为

array([1])

花式索引

b[[1, 0, 1, 0],[0, 1, 2, 0]] # 选择(1,0),(0,1),(1,2) 和(0,0)所对应的值

#输出结果为

array( [ 4. , 2. , 6. , 1.5]) 
b [[1, 0, 1, 0]][:,[0,1,2,0]] # 选择矩阵的行列子集

#输出结果为

array( [[ 4. ,5. , 6. , 4. ],
        [ 1.5, 2. , 3. , 1.5],
        [ 4. , 5. , 6. , 4. ],
        [ 1.5, 2. , 3. , 1.5]])

数组操作

 转置数组

i = np.transpose(b)
i.T  

#输出结果为

array([[1.5, 2. , 3. ],
       [4. , 5. , 6. ]])

改变数组形状

b.ravel() # 拉平数组
g.reshape(3,-2) # 改变数组形状,但不改变数据

添加或删除值

h.resize((2,6)) # 返回形状为(2,6)的新数组
np.append(h,g) # 追加数据
np.insert(a, 1, 5) # 插入数据
np.delete(a,[1]) # 删除数据

合并数组

np.concatenate((a,d),axis=0) # 拼接数组

#输出结果为

array([ 1,  2,  3, 10, 15, 20])
np.vstack((a,b)) # 纵向以行的维度堆叠数组

#输出结果为

array([[1. , 2. , 3. ],
       [1.5, 2. , 3. ],
       [4. , 5. , 6. ]])
np.r_[e,f] # 纵向以行的维度堆叠数组

#输出结果为

array([[7., 7.],
       [7., 7.],
       [1., 0.],
       [0., 1.]])
np.hstack((e,f)) # 横向以列的维度堆叠数组

#输出结果为

array([[7., 7., 1., 0.],
       [7., 7., 0., 1.]])
np.column_stack((a,d)) #  以列的维度创建堆叠数组

#输出结果为

array([[ 1, 10],
       [ 2, 15],
       [ 3, 20]])
np.c_[a,d] # 以列的维度创建堆叠数组

#输出结果为

array([[ 1, 10],
       [ 2, 15],
       [ 3, 20]])

分割数组

np.hsplit(a,3) # 纵向分割数组为3等份

#输出结果为

[array([1]), array([2]), array([3])]
np.vsplit(c,2) # 横向分割数组为2等份

#输出结果为

[array([[[1.5, 2. , 1. ],
         [4. , 5. , 6. ]]]),
 array([[[3., 2., 3.],
         [4., 5., 6.]]])]

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值