数据分析之Numpy基础

Numpy是个较大的知识块,细讲三天三夜都不一定说的完。这里我会简单罗列出一些基础的知识点,并配上相应的例子以供大家理解。

1.创建数组

生成n维数组 np.array()

将下列矩阵输入成ndarray,记为arr1_1

1 3 5

4 2 7

2 1 8

arr1_1 = np.array([[1,3,5],[4,2,7],[2,1,8]])
查看数组的维度 ndim

最外层有几个中括号就是几维

查看arr1的维度

arr1_1.ndim

>>>	2
查看数组的形状 shape

查看arr1_1的形状

arr1_1.shape

>>>	 (3,3)
查看数组的数据类型 dtype

查看arr1_1的数据类型

arr1_1.dtype

>>>	dtype('int32')
调整形状 reshape()

创建从0到14这15个整数构成的一维数组,将它调整形状为(3,5),记为arr1_2

arr1_2 = np.arange(15).reshape((3,5))

>>>	array([[ 0,  1,  2,  3,  4],
		   [ 5,  6,  7,  8,  9],
           [10, 11, 12, 13, 14]])
每个元素都为1 np.ones()

与np.zeros()相同

创建形状为(2,4)的每个元素都为1的数组arr1_3

arr1_3 = np.ones((2,4))
正态分布 np.random.randn(num,dim)

其中 num:采样数, dim:n维

创建与arr1_2数组一样形状的满足标准正态分布的数组arr1_4

m,n = arr1_2.shape
arr1_4 = np.random.randn(m,n)

>>>	array([[-0.31416073, -0.26025905, -0.54291357,  0.0288242 , -0.75148283],
           [ 1.11104542, -0.52550434,  0.7124409 ,  0.50739168, -0.7176994 ],
    	   [ 0.51240116,  1.30424139, -1.73727389,  1.54419445, -2.76840111]])

2.数组算术

元素相加

将arr1_2的每个元素增加1,生成arr2_1

#	法一:
arr2_1 = arr1_2 + 1

#	法二:
arr2_1 = [x+1 for x in arr1_2]

>>>	array([[ 1,  2,  3,  4,  5],
       	   [ 6,  7,  8,  9, 10],
           [11, 12, 13, 14, 15]])
元素相乘

将arr1_2和arr1_4对应元素相乘,生成arr2_2

# 法一:
arr2_2 = arr1_3 * arr1_5

# 法二:
arr2_2 = np.multiply(arr1_3,arr1_5)

>>>	array([[ -0.        ,  -0.26025905,  -1.08582714,   0.08647261,
         -3.00593131],
      	   [  5.55522712,  -3.15302606,   4.9870863 ,   4.05913347,
         -6.45929462],
           [  5.12401156,  14.34665525, -20.84728669,  20.07452781,
        -38.7576156 ]])
元素为指数

eg:以e为底,arr1_1的每个元素为指数,生成新的数组arr2_3

# 法一:
arr2_3 = np.exp(arr1_1)

# 法二:
arr2_3 = math.e**arr1_1

>>>	array([[2.71828183e+00, 2.00855369e+01, 2.00855369e+01],
           [5.45981500e+01, 7.38905610e+00, 2.71828183e+00],
           [7.38905610e+00, 1.09663316e+03, 2.98095799e+03]])

3.索引与切片

行索引
# 行索引为0
arr1_2[0,]

>>>	array([0, 1, 2, 3, 4])

# 行索引为1的元素更改为5
arr1_2[1] = 5

>>>	array([[ 0,  1,  2,  3,  4],
       	   [ 5,  5,  5,  5,  5],
           [10, 11, 12, 13, 14]])
列索引
# 列索引为3
arr1_3[:,3]

>>>	array([ 3,  8, 13])
行列索引
# 行列索引为(0,3)
arr1_3[0,3]

>>>	3

# 行索引为0,列索引为[1,2]
arr1_3[0,[1,2]]

>>>	array([1, 2])

# 行索引为[0,1],列索引为[2,3]的二维数组
arr1_3[[0,1]] [:,[2,3]]

>>>	array([[2, 3],
      	   [7, 8]])
元素筛选

arr中 大于10 或 小于3 的元素

arr1_3[arr1_3>10 | ar1_3r<3]	# | -> 或

>>>	array([ 0,  1,  2, 11, 12, 13, 14])
神奇索引
# 行索引为[0,1],列索引为[2,3]的二维数组
arr1_3[:2,2:4]		# 基础索引
arr1_3[[0,1]][:,[2,3]]		# 神奇索引

>>> array([[2, 3],
           [7, 8]])

# 同时输出 第0行第2列 和 第1行第3列 的元素构成的一维数组
arr1_3[[0,1],[2,3]]

>>> array([2, 8])

4.通用函数

np.where()

np.where(表达式,结果1,结果2)

arr1_3中 大于10的取做10, 小于10的保留,记为arr4_1

arr4_1 = np.where(arr1_3>10,10,arr1_3)

>>> array([[ 0,  1,  2,  3,  4],
    	   [ 5,  6,  7,  8,  9],
     	   [10, 10, 10, 10, 10]])
求均值 arr.mean()

按行:axis=1(不同列)

按列:axis=0(不同行)

将arr1_3的每列求平均

arr1_3.mean(axis=0)

>>> array([5., 6., 7., 8., 9.])
求累积 arr.cumprod()

按行:axis=1(不同列)

按列:axis=0(不同行)

沿着列的方向求累积

arr1_3.comprod(axis=0)

>>> array([[  0,   1,   2,   3,   4],
      	   [  0,   6,  14,  24,  36],
           [  0,  66, 168, 312, 504]], 			  	 dtype=int32)
排序 np.sort()

按行排序:axis=1(不同列)

按列排序:axis=0(不同行)

将arr1_4按列排序

np.sort(arr1_4,axis=0)

>>> array([[-0.31416073, -0.52550434, -1.73727389,  0.0288242 , -2.76840111],
      	   [ 0.51240116, -0.26025905, -0.54291357,  0.50739168, -0.75148283],
           [ 1.11104542,  1.30424139,  0.7124409 ,  1.54419445, -0.7176994 ]])
all()、any()

判断arr4_1是否每个元素都大于9

(arr4_1>9).all()

>>> False

判断arr4_1是否有元素大于9

(arr4_1>9).any()

>>> True

以上就是我日常实验整理出来的一些基本的Numpy知识点(不完全),如有错误,还请各位大佬多多指点。

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值