Numpy简单入门

本文是Numpy的入门指南,介绍了ndarray的创建和操作,包括创建简单数组和结构数组,以及ufunc运算。讲解了如何利用Numpy进行算术运算和统计分析,如最大值、最小值、平均值、百分位数、中位数、标准差等,并提供了排序方法的示例。最后提到了学习资源和参考资料。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Numpy简单入门


    在Numpy中有两个重要的对象:ndarray和ufunc,下面进行简单的介绍和使用

ndarray

    ndarray实际就是多维数组,用于解决多维数组的问题.在Numpy数组中,维数称为秩,一维数组的秩为1,二维数组的秩为2,以此类推.在Numpy中每一个线性的数组称为一个轴,其实秩就是描述轴的数量.

创建简单数组

    下面代码是使用示例:

# 导入numpy包
import numpy as np
# 定义一个一维数组
a = np.array([1, 2, 3])
# 定义一个二维数组
b = np.array([[1, 2, 3], [4, 5, 6], [7, 8, 9]])

# 改变b二维数组的值
b[1, 1] = 0

print(a)
print(b)

"""
[1 2 3]
[[1 2 3]
 [4 0 6]
 [7 8 9]]
"""

创建结构数组

    如果你想统计一个班级里面学生的姓名、年龄,以及语文、英语、数学成绩之类的,使用上面的下标也可以,但是不够便利,使用结构数组就会更直观和方便.

    下面代码是使用示例:

import numpy as np

# 定义dtype结构类型,formats是数据类型:字符串,整型,整型,整型,浮点数
studenttype = np.dtype({
    "names":["name", "age", "chinese", "math", "english"],
    "formats":["S32", "int", "int", "int", "float32"]
})

# 通过设置数组的dtype=studenttype,生成结构数组
students = np.array([("zhangFei", 32, 75, 100, 90), ("GuanYu", 24, 85, 96, 88), ("ZhaoYun", 28, 85, 92, 96)], studenttype)

# 通过结构体中的关键字分别获取所有的名字列表,年龄列表,语文成绩列表,数学成绩列表,英语成绩列表
names = students["name"]
ages = students["age"]
chineses = students["chinese"]
maths = students["math"]
englishs = students["english"]

print(names)
print(ages)
print(chineses)
print(maths)
print(englishs)

# 使用numpy平均数函数计算年龄平均数
print(np.mean(ages))

"""result
[b'zhangFei' b'GuanYu' b'ZhaoYun']
[32 24 28]
[75 85 85]
[100  96  92]
[90. 88. 96.]
28.0
"""

ufunc运算

    ufunc就是numpy中预先实现好的各种运算函数,其采用C语言进行实现,速度非常快.

连续数组的创建

    Numpy可以很方便的创建连续数组,比如下面的示例代码使用arange和linspace函数进行创建

import numpy as np

# 指定初始值,终值,步长来创建等差数列的一维数组,默认不包含终值
x1 = np.arange(1, 11, 2)

# 指定初始值,终值,元素个数来创建等差数列的一维数组
x2 = np.linspace(1, 9, 5)

print(x1)
print(x2)

"""result
[1 3 5 7 9]
[1. 3. 5. 7. 9.]
"""

算数运算

    通过Numpy可以进行加减乘除,求N次方和取余数,示例代码如下:

import numpy as np
x1 = np.arange(1, 11, 2)
x2 = np.linspace(1, 9, 5)

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))
print(np.remainder(x1, x2))

"""result
[ 2.  6. 10. 14. 18.]
[0. 0. 0. 0. 0.]
[ 1.  9. 25. 49. 81.]
[1. 1. 1. 1. 1.]
[1.00000000e+00 2.70000000e+01 3.12500000e+03 8.23543000e+05
 3.87420489e+08]
[0. 0. 0. 0. 0.]
"""

统计函数

    如果你想要对一堆数据有更清晰的认识,就需要对这些数据进行描述性的统计分析,如最大值,最小值,平均值,是否符合正态分布,方差和标准差等等,这些数据可以让你对这堆数据有更清晰的认知

    下面是使用示例:

最大值函数amax(),最小值函数amin()
import numpy as np
a = np.array([[1, 2, 3], [4, 5, 6], [7, 8, 9]])

# 计算整个数组中的最大最小值
print(np.amax(a))
print(np.amin(a))

# 将一行数据视为一组数据计算最大最小值
print(np.amax(a, 0))
print(np.amin(a, 0))

# 将一列数据视为一组数据计算最大最小值
print(np.amax(a, 1))
print(np.amin(a, 1))

"""result
9
1
[7 8 9]
[1 2 3]
[3 6 9]
[1 4 7]
"""
统计最大值与最小值之差ptp()
import numpy as np
a = np.array([[1, 2, 3], [4, 5, 6], [7, 8, 9]])
print(np.ptp(a))
print(np.ptp(a, 0))
print(np.ptp(a, 1))

"""result
8
[6 6 6]
[2 2 2]
"""
统计数组的百分位数percentile()
import numpy as np
a = np.array([[1, 2, 3], [4, 5, 6], [7, 8, 9]])
# 第二个参数是百分位参数设置,代表第p个百分位数,这个P的取值范围为0-100,如果是0就是求最小值,50是求平均数,100是求最大值
print(np.percentile(a, 50))
print(np.percentile(a, 50, 0))
print(np.percentile(a, 50, 1))

"""result
5.0
[4. 5. 6.]
[2. 5. 8.]
"""
统计数组中的中位数median(),平均数mean()
import numpy as np
a = np.array([[1, 2, 3], [4, 5, 6], [7, 8, 9]])

print(np.median(a))
print(np.median(a, 0))
print(np.median(a, 1))

print(np.mean(a))
print(np.mean(a, 0))
print(np.mean(a, 1))

"""result
5.0
[4. 5. 6.]
[2. 5. 8.]
5.0
[4. 5. 6.]
[2. 5. 8.]
"""
统计数组中的加权平均值average()
import numpy as np
a = np.array([1, 2, 4, 5, 6])
# 不设置权重,默认每个值的权重都是相同的:(1+2+4+5+6)/5
print(np.average(a))

# 设置权重:(1*1+2*2+4*3+2*5+2*6)/(1+2+3+2+2)
wts = np.array([1, 2, 3, 2, 2])
print(np.average(a, weights=wts))

"""result
3.6
3.9
"""
统计数组中的标准差std(),方差var()
import numpy as np
a = np.array([1, 2, 4, 5, 6])
print(np.std(a))
print(np.var(a))

"""result
1.8547236990991407
3.44
"""
Numpy排序

    直接使用sort(a, axis=1, kind=“quicksort”, order=None),其中kind参数标识排序算法,可以填入quicksort(快速排序),mergesort(合并排序),heapsort(堆排序);order字段是按照某个字段进行排序

    代码示例如下:

import numpy as np
a = np.array([[1, 9, 3], [4, 5, 6], [7, 8, 2]])
print(np.sort(a))
print(np.sort(a, 0))

"""result
[[1 3 9]
 [4 5 6]
 [2 7 8]]
[[1 5 2]
 [4 8 3]
 [7 9 6]]
"""

参考资料

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值