NumPy入门(附基本算术运算、统计运算、排序等demo)

一、基础概念

Python中使用最多的第三方库,也是SciPy、Pandas等数据科学的基础库。

二、ndarray处理

其实就是多维数组。

Python中的 list 保存的是对象的指针,因此数据量大时很占内存,低效且慢。
NumPy 数组存储在一个均匀连续的内存块中,这样数组计算遍历所有的元素,不像列表 list 还需要对内存地址进行查找,从而节省了计算资源,高效快速。

import numpy as np

a = np.array([1, 2, 3000000])
b = np.array([[1, 2, 3], [4, 5, 6], [7, 8, 9]])
b[1, 1] = 10
print(a.shape)
print(b.shape)  # 获取数组大小 (3, 3)
print(a.dtype)  # 获取元素类型 int32
print(b.dtype)
print(b)

三、取平均值

包含代码注释

import numpy as np

# 使用定义一个叫persontype的数据类型,包含('name', 'age', 'chinese', 'math', 'english')五个字段,类型包含(32位字符串、整型、和浮点型)
persontype = np.dtype({
    'names': ['name', 'age', 'chinese', 'math', 'english'],
    'formats': ['S32', 'i', 'i', 'i', 'f']})

# 使用np.array定义一个数组,内容为第一个参数{数组},数据结构为persontype
peoples = np.array([("ZhangFei", 32, 75, 100, 90), ("GuanYu", 24, 85, 96, 88.5),
                    ("ZhaoYun", 28, 85, 92, 96.5), ("HuangZhong", 29, 65, 85, 100)],
                   dtype=persontype)

# 获取peoples数组的age属性,获得一个数组
ages = peoples[:]['age']
chineses = peoples[:]['chinese']
maths = peoples[:]['math']
englishs = peoples[:]['english']

# np.mean(arr)方法,获取一个数组的平均值
print(np.mean(ages))
print(np.mean(chineses))
print(np.mean(maths))
print(np.mean(englishs))

四、基本算术运算

x1 = np.arange(1, 11, 2)  # 起始值1,结束值1,间隔2 [1 3 5 7 9]
x2 = np.linspace(1, 9, 5)  # 起始值1,结束值2,等分份数 [1. 3. 5. 7. 9.]

print(np.add(x1, x2)) # 相加
print(np.subtract(x1, x2))  # 相减
print(np.multiply(x1, x2))  # 相乘
print(np.divide(x1, x2))  # 相除

print(np.power(x1, x2))  # 求n次方
print(np.remainder(x1, x2))  # 取余数
print(np.mod(x1, x2))  # 取余数

五、统计运算

包含取最大值最小值的运算。

import numpy as np

a = np.array([[1, 2, 3], [4, 5, 6], [7, 8, 9]])
print(np.amin(a))  # 全部元素最小值 1
print(np.amin(a, 0))  # axis=0轴的最小值 [1, 2, 3,]
print(np.amin(a, 1))  # axis=1轴的最小值 将数组视为 [1,4,7], [2,5,8], [3,6,9]三个元素 [1, 4, 7]
print(np.amax(a))  # 全部元素最大值 1
print(np.amax(a, 0))  # axis=0轴的最大值 [7, 8, 9,]
print(np.amax(a, 1))  # axis=1轴的最大值 将数组视为 [1,4,7], [2,5,8], [3,6,9]三个元素 [1, 4, 7]

六、百分位数

取值为0-100,取50就是取平均值。

import numpy as np

# percentile()代表着第 p 个百分位数,这里p的取值范围是0-100,如果p=0,那么就是求最小值,如果p=50就是求平均值,如果p=100就是求最大值。
a = np.array([[1, 2, 3], [4, 5, 6], [7, 8, 9]])
print(np.percentile(a, 50))  # 5.0
print(np.percentile(a, 50, axis=0))  # [4, 5, 6]
print(np.percentile(a, 50, axis=1))  # [2, 5, 8]

七、高级算术运算

  • np.median 求中位数
  • np.mean 求平均数
  • np.average 加权平均值
  • np.std 标准差
  • np.var 方差
import numpy as np

a = np.array([[1, 2, 3], [4, 5, 6], [7, 8, 9]])
# 求中位数
print(np.median(a))  # 5.0
print(np.median(a, axis=0))  # [4. 5. 6.]
print(np.median(a, axis=1))  # [2. 5. 8.]
# 求平均数
print(np.mean(a))  # 5.0
print(np.mean(a, axis=0))  # [4. 5. 6.]
print(np.mean(a, axis=1))  # [2. 5. 8.]

# 求加权平均数
a1 = np.array([1, 2, 3, 4])
wts = np.array([1, 2, 3, 4])
print(np.average(a1))  # 2.5
print(np.average(a1, weights=wts))  # weights 为设置加权的权重 3.0

# 标准差及方差
print(np.std(a))  # 1.118033988749895
print(np.var(a))  # 1.25

八、NumPy排序

你可以使用sort函数,sort(a, axis=-1, kind=‘quicksort’, order=None),默认情况下使用的是快速排序;

  • a 要排序的数组
  • axis=-1 轴限定
  • 排序方式
    • quicksort 快速排序
    • mergesort 合并排序
    • heapsort 堆排序
  • order 指定排序字段
import numpy as np

a = np.array([[4, 3, 2], [2, 4, 1]])
print(np.sort(a))  # 默认从小到大排序
print(np.sort(a, axis=None))  # axis为none会将数组降为一维 [1 2 2 3 4 4]
print(np.sort(a, axis=0))  # [[2 3 1],[4 4 2]]

print(np.sort(a, axis=1))  # [[2 3 4],[1 2 4]]

END

发布了146 篇原创文章 · 获赞 53 · 访问量 25万+

猜你喜欢

转载自blog.csdn.net/momDIY/article/details/97618638
今日推荐