一些个人学习NumPy时的总结,不太全面,欢迎大家一起学习交流!
import numpy as np # 导入numpy包
1. 认识数组
data1 = np.arange(12).reshape(3,4) # 创建一个3行4列的数组
print(data1)
print(data1.dtype) # 数组元素类型
print(data1.ndim) # 数组的维度个数,输出结果2表示二维数组
print(data1.shape) # 数组的维度,输出结果(3,4),表示3行4列
print(data1.size) # 数组元素个数,输出12,表示12个元素
结果
[[ 0 1 2 3]
[ 4 5 6 7]
[ 8 9 10 11]]
int32
2
(3, 4)
12
2. 创建数组
data2_1 = np.array([1,2,3]) # 创建一个一维数组
print(data2_1)
data2_2 = np.array([[1,2,3],[4,5,6]]) # 创建一个二维数组
print(data2_2)
print(np.ones((2,2))) # 创建一个全1数组
print(np.zeros(10)) # 创建一个全0数组
print(np.empty((2,3,2))) # 创建一个全空数组,每个值接近于零
print(np.arange(12))
结果
[1 2 3]
[[1 2 3]
[4 5 6]]
[[1. 1.]
[1. 1.]]
[0. 0. 0. 0. 0. 0. 0. 0. 0. 0.]
[[[5.11798224e-307 1.37961370e-306]
[4.22795269e-307 9.34609790e-307]
[6.23037657e-307 1.33511290e-306]]
[[6.23045126e-307 1.11260348e-306]
[1.37962049e-306 2.22521238e-306]
[1.24611470e-306 1.11261095e-306]]]
[ 0 1 2 3 4 5 6 7 8 9 10 11]
3. 数组数据类型
data3_1 = np.array([[1,2,3],[4,5,6]])
print(data3_1.dtype) # 查看数组数据类型
data3_2 = data3_1.astype(np.float64)
print(data3_2.dtype) # 数据类型转换为float64
float_data3 = np.array([1.2,2.3,3.9])
int_data3 = float_data3.astype(np.int64) # 从float64转为int64
print(int_data3)
str_data3 = np.array(['1','2','3'])
int_2_data = str_data3.astype(np.int64) # 从str转为int64
print(int_2_data)
结果
int32
float64
[1 2 3]
[1 2 3]
4. 数组运算
data4_1 = np.array([[1,2,3],[4,5,6]])
data4_2 = np.array([[1,2,3],[4,5,6]])
print(data4_1+data4_2) # 数组相加
print(data4_1*data4_2) # 数组相乘
print(data4_1-data4_2) # 数组相减
print(data4_1/data4_2) # 数组相除
# 特殊情况:当a.shape != b.shape时,会触发数组广播
data4_3 = np.array([[0],[1],[2],[3]])
print(data4_3.shape)
data4_4 = np.array([1,2,3])
print(data4_4.shape)
print(data4_4+data4_3)
# 数组与标量间的运算
data4_5 = np.array([[1,2,3],[4,5,6]])
data4_6 = 10
print(data4_6+data4_5)
print(data4_6-data4_5)
print(data4_6*data4_5)
print(data4_6/data4_5)
结果
[[ 2 4 6]
[ 8 10 12]]
[[ 1 4 9]
[16 25 36]]
[[0 0 0]
[0 0 0]]
[[1. 1. 1.]
[1. 1. 1.]]
(4, 1)
(3,)
[[1 2 3]
[2 3 4]
[3 4 5]
[4 5 6]]
[[11 12 13]
[14 15 16]]
[[9 8 7]
[6 5 4]]
[[10 20 30]
[40 50 60]]
[[10. 5. 3.33333333]
[ 2.5 2. 1.66666667]]
5. 索引和切片
data5_1 = np.empty((4,4)) # 创建一个空数组
for i in range(4):
data5_1[i] = np.arange(i,i+4) # 动态添加元素
print(data5_1)
print(data5_1[[0,2]]) # 获取索引为[0,2]的元素
# 布尔型
student_name = np.array(['Tom','Lily','Jack','Rose'])
student_score = np.array([[79,88,90],[89,90,92],[83,78,85],[78,76,80]])
print(student_score[student_name == 'Jack'])
结果
[[0. 1. 2. 3.]
[1. 2. 3. 4.]
[2. 3. 4. 5.]
[3. 4. 5. 6.]]
[[0. 1. 2. 3.]
[2. 3. 4. 5.]]
[[83 78 85]]
6. 转置和轴对称
data6_1 = np.arange(12).reshape(3,4)
print(data6_1)
print(data6_1.T) # 使用T属性进行数组转置
data6_2 = np.arange(16).reshape((2,2,4))
print(data6_2)
print(data6_2.transpose(1,2,0)) # 使用transpose()方法对数组进行转置
print(data6_2.swapaxes(1,0)) # 使用swapaxes()方法对数组进行转置
结果
[[ 0 1 2 3]
[ 4 5 6 7]
[ 8 9 10 11]]
[[ 0 4 8]
[ 1 5 9]
[ 2 6 10]
[ 3 7 11]]
[[[ 0 1 2 3]
[ 4 5 6 7]]
[[ 8 9 10 11]
[12 13 14 15]]]
[[[ 0 8]
[ 1 9]
[ 2 10]
[ 3 11]]
[[ 4 12]
[ 5 13]
[ 6 14]
[ 7 15]]]
[[[ 0 1 2 3]
[ 8 9 10 11]]
[[ 4 5 6 7]
[12 13 14 15]]]
7. NumPy 通用函数
data7_1 = np.array([4,9,16])
print(np.sqrt(data7_1)) # 开方
print(np.abs(data7_1)) # 绝对值
print(np.square(data7_1)) # 平方
data7_2 = np.array([1,2,3])
print(np.add(data7_2,data7_1)) # 求和
print(np.multiply(data7_1,data7_2)) # 乘积
print(np.maximum(data7_1,data7_2)) # 最大值比较
print(np.greater(data7_1,data7_2)) # 执行元素级的比较操作
结果
[2. 3. 4.]
[ 4 9 16]
[ 16 81 256]
[ 5 11 19]
[ 4 18 48]
[ 4 9 16]
[ True True True]
8. NumPy进行数据分析
# 条件逻辑转为数组运算
arr_x = np.array([1,5,7])
arr_y = np.array([2,6,8])
arr_con = np.array([True,False,True])
result = np.where(arr_con,arr_x,arr_y)
print(result)
# 数组统计运算
arr8_1 = np.arange(18)
print(arr8_1.sum()) # 求和
print(arr8_1.mean()) # 求平均值
print(arr8_1.argmin()) # 求最小值索引
print(arr8_1.cumsum()) # 累计和
print(arr8_1.cumprod()) # 累计积
arr8_2 = arr8_1 - np.ones(18)
diff_x = np.diff(arr8_2)
print(diff_x) # 差分
print(np.floor([-0.6,-1.4,-0.1,-1.8,0.1,1.4,1.7])) # 向左取整
print(np.ceil([1.2,1.5,1.8,2.1,2.0,-0.5,-0.6,-0.3])) # 向右取整
arr8_3 = np.array([[1,0],[2,-2],[-2,1]])
print(np.where(arr8_3 > 0, arr8_3, 0)) # 小于0的值用0填充,大于0的数不变
# 数组排序
arr8_4 = np.array([[6,2,7],[3,6,2],[4,3,2]])
arr8_4.sort() # 默认axis=1按行排序,axis=0按列排序
print(arr8_4)
# 检索数组元素
arr8_5 = np.array([[1,-2,-7],[-3,6,2],[-4,3,2]])
print(np.any(arr8_5 > 0)) # 数组元素是否有1个大于0
print(np.all(arr8_5 > 0)) # 数组元素是否全部大于0
# 唯一化及其他集合逻辑
arr1_8_6 = np.array([1,1,2,2,3])
print(np.unique(arr1_8_6)) # 去重
print(np.in1d(arr1_8_6,[1,2])) # 在序列B中寻找与序列A相同的值,返回逻辑值的向量
结果
[1 6 7]
153
8.5
0
[ 0 1 3 6 10 15 21 28 36 45 55 66 78 91 105 120 136 153]
[0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0]
[1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1.]
[-1. -2. -1. -2. 0. 1. 1.]
[ 2. 2. 2. 3. 2. -0. -0. -0.]
[[1 0]
[2 0]
[0 1]]
[[2 6 7]
[2 3 6]
[2 3 4]]
True
False
[1 2 3]
[ True True True True False]
9. 线性代数模块
arr9_x = np.array([[1,2,3],[4,5,6]])
arr9_y = np.array([[1,2],[3,4],[5,6]])
print(arr9_x.dot(arr9_y)) # 矩阵乘积
结果
[[22 28]
[49 64]]
10. 随机数
arr10_1 = np.random.rand(3,3) # 随机生成一个二维数组
print(arr10_1)
arr10_2 = np.random.rand(2,3,3) # 随机生成一个三维数组
print(arr10_2)
print(np.random.seed(0)) # 生成随机数的种子
print(np.random.rand(5)) # 随机生成包含5个元素的浮点数组
结果
[[0.02875439 0.09168945 0.58070312]
[0.7946155 0.41234354 0.47758627]
[0.82299928 0.18792629 0.11579902]]
[[[0.62330223 0.57719336 0.40600738]
[0.74697747 0.81377438 0.56935433]
[0.12140782 0.35099371 0.90887829]]
[[0.97748761 0.01659295 0.65731549]
[0.47680095 0.6328054 0.23013741]
[0.09387235 0.99151354 0.34342458]]]
None
[0.5488135 0.71518937 0.60276338 0.54488318 0.4236548
个人学习的一些小结与心得,未经允许,请勿转载!欢迎大家一起交流学习!