Python学习之Numpy练习

1.创建ndarray数组

import numpy as np
#创建一维数组
a = [1.1,2.2,3.3,4.4]
arr = np.array(a)
print('a:{}'.format(a))
print('arr:{}'.format(arr))
a:[1.1, 2.2, 3.3, 4.4]
arr:[ 1.1  2.2  3.3  4.4]
#创建多维数组
b = [[1,2,3,4],[5,6,7,8]]
arr1 = np.array(b)
print('arr1:{}'.format(arr1))
arr1:[[1 2 3 4]
 [5 6 7 8]]
#shape函数的使用
print('arr.shape:{}'.format(arr.shape))
print('arr1.shape:{}'.format(arr1.shape))
arr.shape:(4,)
arr1.shape:(2, 4)

shape函数的使用
如果数组是一维数组,shape函数返回值为(n, ),n记录数组的长度,也是元素的个数,逗号后为空,表明返回值为元组类型;如果是二维数组,则返回两个值(n1,n2),第一个值n1表示行数,逗号后的第二个值n2表示列数,返回值同样是元组对象。

#reshape函数的使用
arr1_reshape = arr1.reshape(4,2)
print('arr1_reshape:{}'.format(arr1_reshape))
print('arr1:{}'.format(arr1))
arr1_reshape:[[1 2]
 [3 4]
 [5 6]
 [7 8]]
arr1:[[1 2 3 4]
 [5 6 7 8]]

reshape函数的使用
reshape函数可以更改数组的结构,原数组的shape仍然保持不变。

#更改数组共享内存区域
arr1[0,0] = 10   #arr1中的第一个元素
print('arr1:{}'.format(arr1))
print('arr1_reshape:{}'.format(arr1_reshape))
arr1:[[10  2  3  4]
 [ 5  6  7  8]]
arr1_reshape:[[10  2]
 [ 3  4]
 [ 5  6]
 [ 7  8]]

对于arr1的修改直接带来了arr1_reshape中相应元素的改变。

#创建特殊数组
# 创建0数组 1数组 空数组 单位数组
print('zero_array1: {}'.format(np.zeros(5)))
print('zero_array2: {}'.format(np.zeros((3,6))))
print('one_array: {}'.format(np.ones((2,3))))
print('empty_array: {}'.format(np.empty((2,2,4))))
print('arange_array: {}'.format(np.arange(10)))
print('eye_array: {}'.format(np.eye(3,3)))
zero_array1: [ 0.  0.  0.  0.  0.]
zero_array2: [[ 0.  0.  0.  0.  0.  0.]
 [ 0.  0.  0.  0.  0.  0.]
 [ 0.  0.  0.  0.  0.  0.]]
one_array: [[ 1.  1.  1.]
 [ 1.  1.  1.]]
empty_array: [[[  6.23042070e-307   7.56587584e-307   1.37961302e-306   6.23053614e-307]
  [  6.23053954e-307   9.34609790e-307   8.45593934e-307   9.34600963e-307]]

 [[  1.86921143e-306   6.23061763e-307   9.34608432e-307   9.79101082e-307]
  [  1.60218491e-306   7.56602523e-307   2.22522596e-306   8.34424766e-308]]]
arange_array: [0 1 2 3 4 5 6 7 8 9]
eye_array: [[ 1.  0.  0.]
 [ 0.  1.  0.]
 [ 0.  0.  1.]]

2.数组的数据类型

#查看数组对象的数据类型
print('arr_dtype:{}'.format(arr.dtype))
print('arr1_dtype:{}'.format(arr1.dtype))
arr_dtype:float64
arr1_dtype:int32

arr数组中的各元素以浮点数类型储存,arr1中的元素都为整型数值。

#创建数组指定数据类型
arr2 = np.array([1,2,3,4,5], dtype=np.int32)
arr3 = np.array([1,2,3,4,5], dtype=np.float64)
print('arr2: {},  arr2 dtype: {} '.format(arr2,arr2.dtype))
print('arr3: {},  arr3 dtype: {} '.format(arr3,arr3.dtype))
arr2: [1 2 3 4 5],  arr2 dtype: int32 
arr3: [ 1.  2.  3.  4.  5.],  arr3 dtype: float64 
#整数数值转化为浮点数值
arr2_float = arr2.astype(np.float32)
print('arr2_float: {},  arr2_float dtype: {} '.format(arr2_float,arr2_float.dtype))
arr2_float: [ 1.  2.  3.  4.  5.],  arr2_float dtype: float32 
#浮点数类型转化为整数值
arr3_int = arr3.astype(np.int32)
print('arr3_int: {},  arr3_int dtype: {} '.format(arr3_int,arr3_int.dtype))
arr3_int: [1 2 3 4 5],  arr3_int dtype: int32 
#字符串转化为数值型
arr4_string = np.array(['1.1','2.2','3.3','4.4'],dtype=np.string_)
arr4_float = arr4_string.astype(np.float64)
print('arr4_float: {}, arr4_float dtype: {} '.format(arr4_float, arr4_float.dtype))
arr4_float: [ 1.1  2.2  3.3  4.4], arr4_float dtype: float64 

3.数组的索引与切片

#对一维数组切片
arr5 = np.arange(15)
print('arr5: {}'.format(arr5))
print('arr5[8]: {}'.format(arr5[8]))
print('arr5[8:12]: {}'.format(arr5[8:12]))    
arr5: [ 0  1  2  3  4  5  6  7  8  9 10 11 12 13 14]
arr5[8]: 8
arr5[8:12]: [ 8  9 10 11]
#对numpy数组进行修改
arr5[8:12] = 21
print('arr5:{}'.format(arr5))
arr5:[ 0  1  2  3  4  5  6  7 21 21 21 21 12 13 14]
#修改数组并保留原数据
arr5 = np.arange(15)
arr5_origin = arr5.copy()
arr5[8:12] = 59
print('arr5: {}'.format(arr5))
print('arr5_origin: {}'.format(arr5_origin))
arr5: [ 0  1  2  3  4  5  6  7 59 59 59 59 12 13 14]
arr5_origin: [ 0  1  2  3  4  5  6  7  8  9 10 11 12 13 14]
#二维数组索引
arr_2d = np.array([[1,1,1],[2,2,2],[3,3,3]])
print('arr_2d[1]:{}'.format(arr_2d[1]))
arr_2d[1]:[2 2 2]
#访问二维数组的元素
print('arr_2d[2,1]: {}'.format(arr_2d[2,1]))
print('arr_2d[2][1]: {}'.format(arr_2d[2][1]))
arr_2d[2,1]: 3
arr_2d[2][1]: 3
#多维数组索引
arr_3d = np.arange(16).reshape((2,2,4))
print('arr_3d:{}'.format(arr_3d))
arr_3d:[[[ 0  1  2  3]
  [ 4  5  6  7]]

 [[ 8  9 10 11]
  [12 13 14 15]]]
print('arr_3d[0]:{}'.format(arr_3d[0]))
print('arr_3d[1]:{}'.format(arr_3d[1]))
arr_3d[0]:[[0 1 2 3]
 [4 5 6 7]]
arr_3d[1]:[[ 8  9 10 11]
 [12 13 14 15]]
print('arr_3d[0]:{}'.format(arr_3d[0,1]))
arr_3d[0]:[4 5 6 7]
#多维数组元素修改
arr_3d_origin = arr_3d[0].copy()
arr_3d[0] = 50
print('arr_3d: {}'.format(arr_3d))
arr_3d[0] = arr_3d_origin
print('arr_3d: {}'.format(arr_3d))
arr_3d: [[[50 50 50 50]
  [50 50 50 50]]

 [[ 8  9 10 11]
  [12 13 14 15]]]
arr_3d: [[[ 0  1  2  3]
  [ 4  5  6  7]]

 [[ 8  9 10 11]
  [12 13 14 15]]]
#多维数组切片索引
arr6 = np.arange(25).reshape(5,5)
print('arr6: {}'.format(arr6))
print('arr6[1,2:4]: {}'.format(arr6[1,2:4]))
print('arr6[1:3,2:4]: {}'.format(arr6[1:3,2:4]))
print('arr6[:,2:]: {}'.format(arr6[:,2:]))
print('arr6[::2,2:]: {}'.format(arr6[::2,2:]))
arr6: [[ 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]]
arr6[1,2:4]: [7 8]
arr6[1:3,2:4]: [[ 7  8]
 [12 13]]
arr6[:,2:]: [[ 2  3  4]
 [ 7  8  9]
 [12 13 14]
 [17 18 19]
 [22 23 24]]
arr6[::2,2:]: [[ 2  3  4]
 [12 13 14]
 [22 23 24]]
#使用布尔型索引选取5×5数组arr6数据
x = np.array([0,1,2,3,1])
print(x==1)
print('arr6[x==1]: {}'.format(arr6[x==1]))
print('arr6[x==1, 3:]: {}'.format(arr6[x==1, 3:]))
[False  True False False  True]
arr6[x==1]: [[ 5  6  7  8  9]
 [20 21 22 23 24]]
arr6[x==1, 3:]: [[ 8  9]
 [23 24]]
#布尔型反向索引
print('arr6[x!=1]:{}'.format(arr6[x!=1]))
print('arr6[~(x==1)]: {}'.format(arr6[~(x==1)]))
print('arr6[np.logical_not(x==1)]: {}'.format(arr6[np.logical_not(x==1)]))
arr6[x!=1]:[[ 0  1  2  3  4]
 [10 11 12 13 14]
 [15 16 17 18 19]]
arr6[~(x==1)]: [[ 0  1  2  3  4]
 [10 11 12 13 14]
 [15 16 17 18 19]]
arr6[np.logical_not(x==1)]: [[ 0  1  2  3  4]
 [10 11 12 13 14]
 [15 16 17 18 19]]

!=表示不等于。
~表示对于条件的否定。
logical_not函数用于设置反向条件。

#布尔型与或索引
print('arr6[(x==1) | (x==0)]: {}'.format(arr6[(x==1) | (x==0)]))
arr6[(x==1) | (x==0)]: [[ 0  1  2  3  4]
 [ 5  6  7  8  9]
 [20 21 22 23 24]]
#布尔型筛选索引
arr6[arr6>10] = 10
print('arr6:{}'.format(arr6))
arr6:[[ 0  1  2  3  4]
 [ 5  6  7  8  9]
 [10 10 10 10 10]
 [10 10 10 10 10]
 [10 10 10 10 10]]

4 数学与统计函数调用

#Numpy统计运算
arr6 = np.arange(25).reshape(5,5)
print('arr6.sum(): {}'.format(arr6.sum()))
print('arr6.mean(): {}'.format(arr6.mean()))
print('arr6.std(): {}'.format(arr6.std()))
print('arr6.var(): {}'.format(arr6.var()))
print('arr6.max(): {}'.format(arr6.max()))
print('arr6.min(): {}'.format(arr6.min()))
print('arr6.cumsum(): {}'.format(arr6.cumsum()))
print('arr6.cumprod(): {}'.format(arr6.cumprod()))
print('arr6.argmin(): {}'.format(arr6.argmin()))
print('arr6.argmax(): {}'.format(arr6.argmax()))
arr6.sum(): 300
arr6.mean(): 12.0
arr6.std(): 7.211102550927978
arr6.var(): 52.0
arr6.max(): 24
arr6.min(): 0
arr6.cumsum(): [  0   1   3   6  10  15  21  28  36  45  55  66  78  91 105 120 136 153
 171 190 210 231 253 276 300]
arr6.cumprod(): [0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0]
arr6.argmin(): 0
arr6.argmax(): 24

求和公式(sum)、求平均值(mean)、方差(var)、标准差(std)、最大值(max)、最小值(min)、累计和(cumsum)与积(cumprod)、最大最小元素的索引(argmax、argmin)等。

#矩阵的转置
arr7 = np.array([[1,2,3],[4,5,6],[7,8,9]])
print('arr7: {}'.format(arr7))
print('arr7.T: {}'.format(arr7.T))
arr7: [[1 2 3]
 [4 5 6]
 [7 8 9]]
arr7.T: [[1 4 7]
 [2 5 8]
 [3 6 9]]
#矩阵的逆
print('arr7: {}'.format(np.linalg.inv(arr7)))
arr7: [[ -4.50359963e+15   9.00719925e+15  -4.50359963e+15]
 [  9.00719925e+15  -1.80143985e+16   9.00719925e+15]
 [ -4.50359963e+15   9.00719925e+15  -4.50359963e+15]]
#矩阵的加减法
arr8 = np.array([[4,5,6],[7,8,9],[1,2,4]])
print('arr7+arr8: {}'.format(arr7+arr8))
print('arr7-arr8: {}'.format(arr7-arr8))
arr7+arr8: [[ 5  7  9]
 [11 13 15]
 [ 8 10 13]]
arr7-arr8: [[-3 -3 -3]
 [-3 -3 -3]
 [ 6  6  5]]
#矩阵的点乘
print('矩阵arr7的点乘: {}'.format(arr7*arr8))
# 矩阵的乘法
print('arr7乘arr8: {}'.format(arr7.dot(arr8.T)))
# 矩阵的迹
print('arr7的迹: {}'.format(np.trace(arr7)))
矩阵arr7的点乘: [[ 4 10 18]
 [28 40 54]
 [ 7 16 36]]
arr7乘arr8: [[ 32  50  17]
 [ 77 122  38]
 [122 194  59]]
arr7的迹: 15
#矩阵的特征值和特征向量
eigvalue,eigvector = np.linalg.eig(arr7)
print('特征值为: {},'.format(eigvalue))
print('特征向量为: {}'.format(eigvector))
特征值为: [  1.61168440e+01  -1.11684397e+00  -1.30367773e-15],
特征向量为: [[-0.23197069 -0.78583024  0.40824829]
 [-0.52532209 -0.08675134 -0.81649658]
 [-0.8186735   0.61232756  0.40824829]]
#矩阵的排序
arr9 = np.array([[2,4,3],[5,4,2],[9,0,3]])
arr9.sort(axis=1)
print('arr9: {}'.format(arr9))
print('按行排序后的矩阵:{}'.format(arr9))
arr10 = np.array([[2,4,3],[5,4,2],[9,0,3]])
np.sort(arr10,axis=0)
print('按列排序后得矩阵:{}'.format(arr10))
arr9: [[2 3 4]
 [2 4 5]
 [0 3 9]]
按行排序后的矩阵:[[2 3 4]
 [2 4 5]
 [0 3 9]]
按列排序后得矩阵:[[2 4 3]
 [5 4 2]
 [9 0 3]]

np.sort函数返回的是已排序的副本,对原数组已做修改。

#矩阵的元素去重
arr11 = np.array([3,2,1,4,3,1,2,4,2,3])
print('去重后的元素:{}'.format(np.unique(arr11)))
去重后的元素:[1 2 3 4]

5 文件的读入和读出

#写入文件操作
arr12 = np.arange(9).reshape(3,3)
np.savetxt('arr12.txt',arr12)
#读取数据文件
a = np.loadtxt('arr12.txt',delimiter=' ')
print('文件内容: {}'.format(a))
文件内容: [[ 0.  1.  2.]
 [ 3.  4.  5.]
 [ 6.  7.  8.]]

如果数据文件是以逗号分隔的csv文件,则在loadtxt函数中,设置参数delimiter=‘,’即可。

参考书籍:
Python 3 快速入门与实战

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值