[NumPy用法总结]
NumPy用法总结
快速了解NumPy
NumPy是一个开源的Python科学计算库,用于快速处理任意维度的数组。
NumPy支持常见的数组和矩阵操作。对于同样的数值计算任务,使用NumPy比直接使用Python要简洁的多。
NumPy使用ndarray对象来处理多维数组,该对象是一个快速而灵活的大数据容器
优势
- 对于同样的数值计算任务,使用Numpy要比直接编写Python代码便捷地多
- NumPy中的数组的存储效率和输入输出性能均远远优于Python中等价的基本数据结构,且能够提升的性能是与数组中的元素成比例的
- Numpy的大部分代码都是用C语言写的,其底层算法在设计时就有着优异的性能,这使得NumPy比纯Python代码高效地多
NumPy的Ndarray对象
创建一维数组
1234567891011121314151617181920# 一维数组
import numpy as np
# 创建数组的多种形式
# 1. 直接传入列表的形式进行创建
list1 = [1,2,3,4,5]
oneArray = np.array(list1)
print(type(oneArray))
print(oneArray)
# 2.传入range()生成序列
t2 = np.array(range(10))
print(t2)
print(type(t2))
# 3. 使用numpy自带的np.arange()生成数组
t3 = np.arange(0,10,2)
print(t3)
print(type(t3))
运行结果:
<class 'numpy.ndarray'>
[1 2 3 4 5]
[0 1 2 3 4 5 6 7 8 9]
<class 'numpy.ndarray'>
[0 2 4 6 8]
<class 'numpy.ndarray'>
创建二维数组
123456# 创建二维数组
import numpy as np
list2 = [[1,2],[3,4],[5,6]]
twoArray = np.array(list2)
print(twoArray)
运行结果:
[[1 2]
[3 4]
[5 6]]
常用属性
12345678910111213141516# 常用属性
import numpy as np
list2 = [[1,2],[3,4],[5,6]]
twoArray = np.array(list2)
print(twoArray)
# 获取数组的维度(注意:与函数的参数很像)
print(twoArray.ndim)
# 形状(行,列)
print(twoArray.shape)
# 有多少个元素
print(twoArray.size)
运行结果:
[[1 2]
[3 4]
[5 6]]
2
(3, 2)
6
调整数组的形状
12345678910111213141516171819import numpy as np
four = np.array([[1,2,3],[4,5,6]])
print(four,four.shape,id(four))
# 修改的是原有的
# four.shape = (3,2)
# print(four)
# 修改返回一个新的数组
# five = four.reshape(3,2)
# print(four,id(five))
# print(four)
# 将多维数组变成一维数组
# 默认情况下 'C'以行为主的顺序展开,'F'(Fortran风格)意味着以列的顺序展开
five = four.reshape((6,),order="F")
six = four.flatten(order='C')
print(five)
print(six)
运行结果:
[[1 2 3]
[4 5 6]] (2, 3) 2183058601424
[1 4 2 5 3 6]
[1 2 3 4 5 6]
123456789101112# 维度的转换
t = np.arange(24)
print(t)
print(t.shape)
# 转化为二维
t1 =t.reshape((4,6))
print(t1)
print(t1.shape)
# 转化为三维
t2 = t.reshape((2,3,4))
print(t2)
print(t2.shape)
运行结果:
[ 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23]
(24,)
[[ 0 1 2 3 4 5]
[ 6 7 8 9 10 11]
[12 13 14 15 16 17]
[18 19 20 21 22 23]]
(4, 6)
[[[ 0 1 2 3]
[ 4 5 6 7]
[ 8 9 10 11]]
[[12 13 14 15]
[16 17 18 19]
[20 21 22 23]]]
(2, 3, 4)
将数组转为list
12345# 将数组转化为列表
a = np.array([9,12,88,14,25])
list_a = a.tolist()
print(list_a)
print(type(list_a))
运行结果:
[9, 12, 88, 14, 25]
<class 'list'>
数组的计算
数组和数的计算
1234567# 数组的操作
t1 = np.arange(24).reshape((6,4))
t2 = np.arange(100,124).reshape((6,4))
print(t1)
print(t2)
print(t1+t2)
print(t1*t2)
运行结果:
[[ 0 1 2 3]
[ 4 5 6 7]
[ 8 9 10 11]
[12 13 14 15]
[16 17 18 19]
[20 21 22 23]]
[[100 101 102 103]
[104 105 106 107]
[108 109 110 111]
[112 113 114 115]
[116 117 118 119]
[120 121 122 123]]
[[100 102 104 106]
[108 110 112 114]
[116 118 120 122]
[124 126 128 130]
[132 134 136 138]
[140 142 144 146]]
[[ 0 101 204 309]
[ 416 525 636 749]
[ 864 981 1100 1221]
[1344 1469 1596 1725]
[1856 1989 2124 2261]
[2400 2541 2684 2829]]
数组与数组之间的操作
123456# 不同形状的多维数组不可以进行计算
t1 = np.arange(24).reshape((4,6))
t2 = np.arange(18).reshape((3,6))
print(t1)
print(t2)
# print(t1-t2)
1234567# 行数或列数相同的一维数组和多维数组也可以进行计算,直适合一维数组和多维数组的情况
# 行形状相同
t1 = np.arange(24).reshape((4,6))
t2 = np.arange(0,6)
print(t1)
print(t2)
print(t1-t2)
运行结果:
[[ 0 1 2 3 4 5]
[ 6 7 8 9 10 11]
[12 13 14 15 16 17]
[18 19 20 21 22 23]]
[0 1 2 3 4 5]
[[ 0 0 0 0 0 0]
[ 6 6 6 6 6 6]
[12 12 12 12 12 12]
[18 18 18 18 18 18]]
123456# 列形状相同
t1 = np.arange(24).reshape((4,6))
t2 = np.arange(4).reshape((4,1))
print(t1)
print(t2)
print(t1+t2)
运行结果:
[[ 0 1 2 3 4 5]
[ 6 7 8 9 10 11]
[12 13 14 15 16 17]
[18 19 20 21 22 23]]
[[0]
[1]
[2]
[3]]
[[ 0 1 2 3 4 5]
[ 7 8 9 10 11 12]
[14 15 16 17 18 19]
[21 22 23 24 25 26]]