python库——Numpy

本文介绍了Python的Numpy库,包括如何创建数组、轴的概念、数据格式、运算、文件存取、索引和切片以及数组调整。还讨论了数据类型如Int8, Int16等,并展示了各种运算,如矩阵乘法、广播运算和数据处理,如处理NaN值的方法。此外,还涉及文件读写、数组切片和调整,以及一些实用的数组操作函数。" 139144952,20016872,小华地图寻宝算法解析与实现,"['算法', '编程题', 'Java', 'JavaScript', 'Python']
摘要由CSDN通过智能技术生成

文档 https://numpy.org/doc/stable/index.html

下载

pip install numpy

导入

import numpy as np

ndarray比python原生list运算快很多

创建数组

  • 直接创建

    a=np.array([1,2,3,4])
    a
    >array([1, 2, 3, 4])
    a.sharp
    

    (4,) # 4行1列

  • 指定值和步长(前闭后开)

    d=np.arange(0,1,0.1)
    d
    

    array([0. , 0.1, 0.2, 0.3, 0.4, 0.5, 0.6, 0.7, 0.8, 0.9])

  • 指定值和元素个数(等差数列)

    e=np.linspace(0,1,10)
    e
    

    array([0. , 0.11111111, 0.22222222, 0.33333333, 0.44444444,
    0.55555556, 0.66666667, 0.77777778, 0.88888889, 1. ])

  • 指定值和元素个数(等比数列)

    #从1到100
    f=np.logspace(0,2,10)
    f
    

    array([ 1. , 1.66810054, 2.7825594 , 4.64158883,
    7.74263683, 12.91549665, 21.5443469 , 35.93813664,
    59.94842503, 100. ])

一维数组只有一个0轴
在这里插入图片描述
在这里插入图片描述
可指定计算某个轴方向上的数字

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

[5 7 9]
[ 6 15]

a=np.arange(27).reshape((3,3,3))
print(a)
print("-"*20)
b=np.sum(a, axis=0)
print(b)
print("-"*20)
c=np.sum(a, axis=1)
print(c)
print("-"*20)
d=np.sum(a, axis=2)
print(d)

在这里插入图片描述

数据格式

Int8 等于Byte, 占1个字节.
Int16 意思是16位整数(16bit integer),相当于short 占2个字节
Int32 意思是32位整数(32bit integer), 相当于 int 占4个字节
Int64 意思是64位整数(64bit interger), 相当于 long 占8个字节

import random

f = np.array([1,2,3,4,5], dtype = np.int16) # dtype设置数据类型,默认为int32
# 返回数组中每个元素的字节单位长度
print(f.itemsize) 
# 获取数据类型
print(f.dtype)

# 调整数据类型
f1 = f.astype(np.int64) 
print(f1.dtype)
print(f1.itemsize) 

# 随机生成小数
# round()方法返回浮点数四舍五入的值
print(round(random.random(),2))

arr = np.array([random.random() for i in range(10)])
print(arr)
print(arr.itemsize)
print(arr.dtype)
# 取小数点后两位
print(np.round(arr,2))

2
int16
int64
8
0.71
[0.65654548 0.6164441 0.28577322 0.5186117 0.71748233 0.79910097
0.50977869 0.87602431 0.58216741 0.39614424]
8
float64
[0.66 0.62 0.29 0.52 0.72 0.8 0.51 0.88 0.58 0.4 ]

nan与inf
inf 表示无穷大,需要使用 float(‘inf’) 函数来转化,对应的有float(’-inf’) 表示无穷小。
当一个数字除以0,Python中会报错,但是numpy中会用inf或者-inf表示
nan,常用来表示缺失的数据。任何与其做运算结果都是 nan

a = np.nan
b = np.inf
print(a,type(a))
print(b,type(b))

nan <class ‘float’>
inf <class ‘float’>

  • 判断nan的个数
    可以使用np.count_nonzero()来判断非零的个数
    np.nan != np.nan结果是TRUE,可以结合使用判断nan的个数

    t = np.arange(24,dtype=float).reshape(4,6)
    t[3,4] = np.nan
    print(np.count_nonzero(t))
    print(t!=t)
    print(np.count_nonzero(t != t))
    

    23
    [[False False False False False False]
    [False False False False False False]
    [False False False False False False]
    [False False False False True False]]
    1

  • 将nan替换为0

    t[np.isnan(t)] = 0
    print(t)
    

    [[ 0. 1. 2. 3. 4. 5.]
    [ 6. 7. 8. 9. 10. 11.]
    [12. 13. 14. 15. 16. 17.]
    [18. 19. 20. 21. 0. 23.]]

例:
处理数据中的nan值
全部替换为0会对结果造成较大的影响,一般替换为均值(中值)或直接删掉有缺失值的一行

t[1,3:] = np.nan
print(t)
print('-------------------')
print(t.shape)
# 遍历每一列,然后判断每一列是否有nan
for i in range(t.shape[1]):
	#获取当前列数据
	temp_col = t[:,i]

	# 判断当前列的数据中是否含有nan
	nan_num = np.count_nonzero(temp_col != temp_col)
	# 条件成立说明含有nan
	if nan_num != 0:
		# 将这一列不为nan的数据拿出来
		temp_col_not_nan = temp_col[temp_col == temp_col]
		# 将nan替换成这一列的平均值
		temp_col[np.isnan(temp_col)] = np.mean(temp_col_not_nan)
		
print(t)

[[ 0. 1. 2. 3. 4. 5.]
[ 6. 7. 8. nan nan nan]
[12. 13. 14. 15. 16. 17.]
[18. 19. 20. 21. 0. 23.]]
-------------------
(4, 6)
[[ 0. 1. 2. 3. 4. 5. ]
[ 6. 7. 8. 13. 6.66666667 15. ]
[12. 13. 14. 15. 16. 17. ]
[18. 19. 20. 21. 0. 23. ]]

运算

  • 使用np.dot()计算矩阵乘积

    a=np.arange(12).reshape
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

叶柖

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值