【Python数据分析】Numpy详细教程

Python入门之Numpy

Numpy属性

  • ndim: 维度,即确定最底层一个元素位置需要用到的索引个数
  • shape: 行数和列数
  • size: 元素个数
import numpy as np
a = np.array([[0,1,2], [3,4,5], [6,7,8]])
a.ndim   # 维度
2
a.shape  # 行数和列数
(3, 3)
a.size   # 元素个数
9

Numpy的创建

Example1 创建特定数组
a = np.array([[2,23,4],[3,34,5]])
print(a)
[[ 2 23  4]
 [ 3 34  5]]
Example2 创建全零数组
a = np.zeros((3,3))
print(a)
[[ 0.  0.  0.  0.  0.]]
Example3 创建全一数组
a = np.ones((3,3))
print(a)
[[ 1.  1.  1.]
 [ 1.  1.  1.]
 [ 1.  1.  1.]]
Example4 创建全空数组,其包含的值是无意义的(慎用)
a = np.empty((3,2))
print(a)
[[ 0.  0.]
 [ 0.  0.]
 [ 0.  0.]]
Example5 用 arange 创建连续数组
a = np.arange(10 , 20 ,2)
print(a)
[10 12 14 16 18]
Example6 用 reshape 改变数组的形状
a = np.arange(12).reshape((3, 4))
print(a)
[[ 0  1  2  3]
 [ 4  5  6  7]
 [ 8  9 10 11]]
Example7 用 linspace 创建线段型数组
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.        ]

Numpy的基础运算

矩阵针对元素的运算有加、减、乘、除、乘方,还有一些函数运算,例如求和(sum())、求最大值(max())、求余弦值(sin())等等。

a = np.arange(1,7).reshape((2,3))
print(a)
[[1 2 3]
 [4 5 6]]
b = np.arange(2,8).reshape((2,3))
print(b)
[[2 3 4]
 [5 6 7]]
b * a    # 加、减、乘、除类似
array([[ 2,  6, 12],
       [20, 30, 42]])
b + 2    # 加、减、乘、除类似
array([[4, 5, 6],
       [7, 8, 9]])
np.sum(a) # 求最大值、最小值类似
21
np.sin(a)  # 其他数学函数类似
array([[ 0.84147098,  0.90929743,  0.14112001],
       [-0.7568025 , -0.95892427, -0.2794155 ]])
print(a < 4)   # 针对每一个元素
[[ True  True  True]
 [False False False]]

矩阵乘法:

np.dot(a, b.reshape((3, 2)))    # (2 * 3) . (3 * 2)
array([[28, 34],
       [64, 79]])

最大元素和最小元素的索引:

np.argmin(b)
0
np.argmax(b)
5

均值与中位数:

mean = np.mean(b)
median = np.median(b)
print("均值:{0}   中位数:{1}".format(mean, median))
均值:4.5   中位数:4.5

累加运算与累差运算:

np.cumsum(b)
array([ 2,  5,  9, 14, 20, 27], dtype=int32)
np.diff(b)  # 每一行后一项与前一项的差
array([[1, 1],
       [1, 1]])

矩阵的转置:

np.transpose(b)
array([[2, 5],
       [3, 6],
       [4, 7]])
a.T
array([[1, 4],
       [2, 5],
       [3, 6]])

Numpy的输出

索引和切边与List类似,此处不做赘述。

按行输出与按列输出:

for row in b:
    print(row)
[2 3 4]
[5 6 7]
for column in b.T:
    print(column)
[2 5]
[3 6]
[4 7]

Numpy的合并

上下合并 np.vstack()

np.vstack((a,b))    # 接收一个元组做参数
array([[1, 2, 3],
       [4, 5, 6],
       [2, 3, 4],
       [5, 6, 7]])

左右合并 np.hstack()

np.hstack((a,b))
array([[1, 2, 3, 2, 3, 4],
       [4, 5, 6, 5, 6, 7]])

利用轴的概念直接合并 axis参数

np.concatenate((a,b), axis = 0)
array([[1, 2, 3],
       [4, 5, 6],
       [2, 3, 4],
       [5, 6, 7]])
np.concatenate((a,b), axis = 1)
array([[1, 2, 3, 2, 3, 4],
       [4, 5, 6, 5, 6, 7]])

Numpy的分割

纵向分割

仅能等分,中间的参数表示分成的array个数

A = np.arange(12).reshape(3,4)
np.split(A, 2, axis=1)
[array([[0, 1],
        [4, 5],
        [8, 9]]), array([[ 2,  3],
        [ 6,  7],
        [10, 11]])]

横向分割

np.split(A, 3, axis=0)
[array([[0, 1, 2, 3]]), array([[4, 5, 6, 7]]), array([[ 8,  9, 10, 11]])]

不等量分割

np.array_split(A, 3, axis=1)
[array([[0, 1],
        [4, 5],
        [8, 9]]), array([[ 2],
        [ 6],
        [10]]), array([[ 3],
        [ 7],
        [11]])]

Numpy的 = 与copy()

赋值具有关联性,copy()是一个新的拷贝

a
array([[1, 2, 3],
       [4, 5, 6]])
b = a    # 将a赋值给b
b
array([[1, 4, 3],
       [4, 5, 6]])
a[0][1] = 4  #修改a中一个元素
a
array([[1, 4, 3],
       [4, 5, 6]])
b  # b中对应元素也发生了改变
array([[1, 4, 3],
       [4, 5, 6]])

copy()的矩阵不会随之改变

b = a.copy()
a[1][1] = 11
a
array([[ 1,  4,  3],
       [ 4, 11,  6]])
b
array([[1, 4, 3],
       [4, 5, 6]])

你可能感兴趣的:(【Python数据分析】Numpy详细教程)