Python数据分析numpy入门

Posted Geek_bao

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Python数据分析numpy入门相关的知识,希望对你有一定的参考价值。

一、numpy简介

  • Numpy是一个用python实现的科学计算的扩展程序库,包括:

    1、一个强大的N维数组对象Array;
    2、比较成熟的(广播)函数库;
    3、用于整合C/C++和Fortran代码的工具包;
    4、实用的线性代数、傅里叶变换和随机数生成函数。numpy和稀疏矩阵运算包scipy配合使用更加方便。

  • NumPy(Numeric Python)提供了许多高级的数值编程工具,如:矩阵数据类型、矢量处理,以及精密的运算库。专为进行严格的数字处理而产生。多为很多大型金融公司使用,以及核心的科学计算组织如:Lawrence Livermore,NASA用其处理一些本来使用C++,Fortran或Matlab等所做的任务。

二、numpy基本操作

2.1 列表转为矩阵

import numpy as np
array = np.array([
    [1, 3, 5],
    [4, 6, 9]
])
print(array)

输出结果如下:

[[1 3 5]
 [4 6 9]]

2.2 维度

print('number of dim:', array.ndim)

输出结果如下:

number of dim: 2

2.3 行数和列数

print('shape:', array.shape)

输出结果如下:

shape: (2, 3)

2.4元素个数

print('size:', array.size)

输出结果如下:

size: 6

三、numpy创建array

3.1 一维array创建

import numpy as np
a = np.array([2, 23, 4], dtype=np.int32) # np.int默认为int32
print(a)
print(a.dtype)

执行结果如下:

[ 2 23  4]
int32

3.2 多维array创建

import numpy as np
a = np.array([[2, 3, 4],
               [3, 4, 5]])
print(a)

执行结果如下:

[[2 3 4]
 [3 4 5]]

3.3 创建全零数组

import numpy as np
a = np.zeros((3, 4)) # 生成34列的全零矩阵
print(a)

执行结果如下:

[[0. 0. 0. 0.]
 [0. 0. 0. 0.]
 [0. 0. 0. 0.]]

3.4 创建全1数组

import numpy as np
# 创建全一数据,同时指定数据类型
a = np.ones((3, 4), dtype=np.int)
print(a)

执行结果如下:

[[1 1 1 1]
 [1 1 1 1]
 [1 1 1 1]]

3.5 创建全空数组

import numpy as np
# 创建全空数组,其实每个值都是接近于零的数
a = np.empty((3, 4))
print(a)

执行结果如下:

[[6.23042070e-307 8.90092016e-307 1.29060871e-306 1.33511290e-306]
 [1.11261027e-306 1.11261502e-306 1.42410839e-306 7.56597770e-307]
 [6.23059726e-307 1.42419530e-306 7.56602523e-307 1.29061821e-306]]

3.6 创建全连续数组

import numpy as np
# 创建连续数组
a = np.arange(10, 21, 2) # 10-21的数据,步长为2
print(a)

输出结果如下:

[10 12 14 16 18 20]

3.7 reshape操作

import numpy as np
# 创建连续数组
a = np.arange(10, 21, 2) # 10-21的数据,步长为2
b = a.reshape((2, 3))# 使用reshape改变上述数据的形状
print(b)

输出结果如下:

[[10 12 14]
 [16 18 20]]

3.8 创建连续型数据

(1)创建线段型数据

import numpy as np
# 创建线段型数据
a = np.linspace(1, 10, 20)  # 开始端1,结束端10,且分割成20个数据,生成线段
print(a)

输出结果如下:

[ 1.          1.47368421  1.94736842  2.42105263  2.89473684  3.36842105
  3.84210526  4.31578947  4.78947368  5.26315789  5.73684211  6.21052632
  6.68421053  7.15789474  7.63157895  8.10526316  8.57894737  9.05263158
  9.52631579 10.        ]

3.9 linspace的reshape操作

import numpy as np
# 创建线段型数据
a = np.linspace(1, 10, 20)  # 开始端1,结束端10,且分割成20个数据,生成线段
b = a.reshape((5, 4))
print(b)

输出结果如下:

[[ 1.          1.47368421  1.94736842  2.42105263]
 [ 2.89473684  3.36842105  3.84210526  4.31578947]
 [ 4.78947368  5.26315789  5.73684211  6.21052632]
 [ 6.68421053  7.15789474  7.63157895  8.10526316]
 [ 8.57894737  9.05263158  9.52631579 10.        ]]

Process finished with exit code 0

四、numpy基本运算

4.1 一维矩阵运算

import numpy as np
# 一维矩阵运算
a = np.array([10, 20, 30, 40])
b = np.arange(4)
print(a, b)

输出结果如下:

[10 20 30 40] [0 1 2 3]

Process finished with exit code 0

(1)减法:

c = a - b
print(c)

运行结果:

[10 19 28 37]

(2)乘法:

print(a*b)

运行结果:

[  0  20  60 120]

(3)乘方:

c = b**2
print(c)

运行结果:

[0 1 4 9]

(4)数学函数工具:

c = np.sin(a)
print(c)

运行结果:

[-0.54402111  0.91294525 -0.98803162  0.74511316]

(5)判断全体数组数值大小比较:

print(b < 2)

运行结果:

[ True  True False False]

(6)判断两个数组数值大小是否相等:

import numpy as np
a = np.array([1, 1, 4, 3])
b = np.arange(4)
print(a==b)

运行结果:

[False  True False  True]

Process finished with exit code 0

4.2 多维矩阵运算

import numpy as np
a = np.array([[1, 1], [0, 1]])
b = np.arange(4).reshape((2, 2))
print(a)
print(b)

运行结果:

[[1 1]
 [0 1]]
[[0 1]
 [2 3]]

(1)乘法运算一:

c = a.dot(b)
print(c)

运行结果:

[[2 4]
 [2 3]]

(2)乘法运算二:

c = np.dot(a, b)
print(c)

运行结果:

[[2 4]
 [2 3]]

(3)相关函数的运用:

import numpy as np
a = np.random.random((2, 4))# 表示生成24列的浮点数,都是从0-1中随机
print("a = ", a)
print(np.sum(a))
print(np.min(a))
print(np.max(a))

运行结果:

a =  [[0.67284049 0.35394893 0.36732456 0.37686218]
 [0.90342021 0.66481635 0.35398395 0.94859384]]
4.6417905148550584
0.35394893317390963
0.9485938445365465

Process finished with exit code 0

注意:如果你需要对行或者列进行查找运算,
就需要在上述代码中为 axis 进行赋值。
当axis的值为0的时候,将会以列作为查找单元,
当axis的值为1的时候,将会以行作为查找单元。
代码示例如下:

import numpy as np
a = np.random.random((2, 4))
print("a = ", a)
print("sum = ", np.sum(a, axis=1))
print("min = ", np.min(a, axis=0))
print("max = ", np.max(a, axis=1))

运行结果如下:

a =  [[0.01635406 0.48279782 0.61989256 0.64724951]
 [0.33328542 0.86281576 0.93707194 0.37464947]]
sum =  [1.76629396 2.50782259]
min =  [0.01635406 0.48279782 0.61989256 0.37464947]
max =  [0.64724951 0.93707194]

Process finished with exit code 0


4.3 基本计算

import numpy as np
A = np.arange(2, 14).reshape((3, 4))
print(A)

运行结果如下:

[[ 2  3  4  5]
 [ 6  7  8  9]
 [10 11 12 13]]

(1)索引运算

# 最小元素索引
print(np.argmin(A))
# 最大元素索引
print(np.argmax(A))

运行结果如下:

0
11

(2)均值及中位数运算

# 求整个矩阵均值
print(np.mean(A))
print(np.average(A))
print(A.mean())
# 中位数
print(np.median(A))

运行结果如下:

7.5
7.5
7.5
7.5

(3)累加和累差

# 累加
print(np.cumsum(A)) # 每个位置的数=它前面位置的数求和+本身
# 累差运算
B = np.array([
    [3, 5, 9],
    [4, 8, 10]
])
print(np.diff(B))

运行结果如下:

[ 2  5  9 14 20 27 35 44 54 65 77 90]
[[2 4]
 [4 2]]

(4)多维非零元素索引

B = np.array([
    [3, 5, 9],
    [4, 8, 10]
])

C = np.array([
    [0, 5, 9],
    [4, 0, 10]
])
print(np.nonzero(B))
print(np.nonzero(C))

运行结果如下:

(array([0, 0, 0, 1, 1, 1], dtype=int64), array([0, 1, 2, 0, 1, 2], dtype=int64))
(array([0, 0, 1, 1], dtype=int64), array([1, 2, 0, 2], dtype=int64))

结果表示为,行维度和列维度来描述非零元素位置,如B非零元素位置为(0,0)(0,1)(0,2)(1,0)(1,1)(1,2)。

(4)排序和矩阵转置

import numpy as np
A = np.arange(14, 2, -1).reshape((3, 4))
print(A)
# 排序
print(np.sort(A))

运行结果如下:

[[14 13 12 11]
 [10  9  8  7]
 [ 6  5  4  3]]
[[11 12 13 14]
 [ 7  8  9 10]
 [ 3  4  5  6]]

矩阵转置运算:

# 矩阵转置
print(np.transpose(A))
print(A.T)
print(A)

运行结果如下:

[[14 10  6]
 [13  9  5]
 [12  8  4]
 [11  7  3]]
[[14 10  6]
 [13  9  5]
 [12  8  4]
 [11  7  3]]
 [[14 13 12 11]
 [10  9  8  7]
 [ 6  5  4  3]]

clip()函数,矩阵数值的上下限:clip(Array,Array_min,Array_max);
将Array_min<X<Array_max X表示矩阵A中的数,如果满足上述关系,则原数不变。否则,如果X<Array_min,则将矩阵中X变为Array_min;
如果X>Array_max,则将矩阵中X变为Array_max.

print(np.clip(A, 5, 9))

运行结果如下:

[[9 9 9 9]
 [9 9 8 7]
 [6 5 5 5]]

4.4 numpy索引和切片

(1)一维索引切片

import numpy as np
A = np.arange(3, 15)
print(A)
print(A[3])  # 取索引值为3的元素

运行结果如下:

[ 3  4  5  6  7  8  9 10 11 12 13 14]
6

(2)多维索引切片

B = A以上是关于Python数据分析numpy入门的主要内容,如果未能解决你的问题,请参考以下文章

numpy基础入门

Python数据分析numpy入门

Python中的Numpy入门教程

python numpy片段

python数据分析与展示Numpy入门

Python数据分析numpy入门