Python数据分析 Numpy快速入门

Python数据分析 Numpy快速入门,第1张

导入库
import numpy as np
1-数组的创建 1-1 列表创建数组
a1 = np.array([1,2,3])
a1
array([1, 2, 3])
1-2 元组创建数组
a2 = np.array((1,2,3))
a2
array([1, 2, 3])
1-3 字符串创建数组
a3 = np.array('123')
a3
array('123', dtype=')
1-4 np.zeros()
a4 = np.zeros(3)
a4
array([0., 0., 0.])
1-5 np.ones()
a5 = np.ones(3)
a5
array([1., 1., 1.])
1-6 np.arange()
a6 = np.arange(1, 10, 2)
a6
array([1, 3, 5, 7, 9])
1-7 np.linspace()
a7 = np.linspace(1, 10, num=5)
a7
array([ 1.  ,  3.25,  5.5 ,  7.75, 10.  ])
1-8 np.empty()
a8 = np.empty(2)
a8
array([ 1., 10.])
2-指定数据类型

x = np.ones(2, dtype=np.int64)
x
array([1, 1], dtype=int64)
3-查看数据类型
type(arr)
numpy.ndarray  # 表示多维数组


arr = np.arange(1,5)
arr.dtype  
dtype('int32')
4-指定数组的数据类型

numpy.array(object,dtype=None)
创建数组时通过dtype直接指定

import numpy as np
arr = np.array([1,2,3],dtype='f8')
arr.dtype

arr.astype(dtype) # 修改数组数据类型

import numpy as np
arr = np.array([1,2,3])
arr = arr.astype(np.float32)
arr.dtype
5-查看数组形状(维度)

arr.ndim
查看数组的维度,返回值为整数

arr1 = np.arange(10)
np.ndim(arr1)
1


arr2 = np.array([[1,2,3],[4,5,6]])
np.ndim(arr2)
2

arr.shape
查看数组的,返回值为元组

arr3 = np.arange(15)
np.shape(arr3)
(15,)

arr4 = np.array([[1,2,3],[4,5,6]])
np.shape(arr4)
(2, 3)

arr5 = np.array([[[1,2,3],[4,5,6]],[[7,8,9],[10,11,12]]])
arr5.shape
(2, 2, 3)
6-重塑维度 6-1 一维转多维

arr.reshape(shape,order=“C”)
○ shape为数组重塑形状
○ order表示重塑方向
■ C顺序(行方向)重塑
■ F顺序(列方向)重塑

import numpy as np
arr6 = np.arange(6)
arr6 = arr6.reshape(2,3)
arr6

array([[0, 1, 2],
       [3, 4, 5]])
6-2 多维转一维

● arr.flatten() 不会影响原数据
● arr.ravel() 会影响原数据

arr7 = np.array([[[1,2,3],[4,5,6]],[[7,8,9],[10,11,12]]])
arr7 = arr7.flatten()
arr7
array([ 1,  2,  3,  4,  5,  6,  7,  8,  9, 10, 11, 12])


arr8 = np.array([[[1,2,3],[4,5,6]],[[7,8,9],[10,11,12]]])
arr8 = arr8.ravel()
arr8
array([ 1,  2,  3,  4,  5,  6,  7,  8,  9, 10, 11, 12])
x = np.array([[1,2,3],[4,5,6],[7,8,9],[10,11,12]])
x
array([[ 1,  2,  3],
       [ 4,  5,  6],
       [ 7,  8,  9],
       [10, 11, 12]])


x.flatten()[1] = 100
x
array([[ 1,  2,  3],
       [ 4,  5,  6],
       [ 7,  8,  9],
       [10, 11, 12]])


x.ravel()[1]=100
x
array([[  1, 100,   3],
       [  4,   5,   6],
       [  7,   8,   9],
       [ 10,  11,  12]])
6-3 数组转置与换轴

arr.transpose() # 转置

arr9 = np.array([[1,2,3],[4,5,6],[7,8,9],[10,11,12]])
arr9
array([[ 1,  2,  3],
       [ 4,  5,  6],
       [ 7,  8,  9],
       [10, 11, 12]])

arr9.transpose()
array([[ 1,  4,  7, 10],
       [ 2,  5,  8, 11],
       [ 3,  6,  9, 12]])

arr.T # 转置

arr10 = np.array([[1,2,3],[4,5,6],[7,8,9],[10,11,12]])
arr10.T
array([[ 1,  4,  7, 10],
       [ 2,  5,  8, 11],
       [ 3,  6,  9, 12]])

arr.swapaxes() # 换轴

arr11 = np.ones((2,3,4,5,6))
np.swapaxes(arr11, 3, 1).shape
(2, 5, 4, 3, 6)

np.swapaxes(arr11, 2,0).shape
(4, 3, 2, 5, 6)
7-数组的 *** 作 7-1 数组的索引

一维和列表的索引差不多

arr1 = np.arange(10)
arr1
array([0, 1, 2, 3, 4, 5, 6, 7, 8, 9])

arr1[0]
0

arr1[-1]
9

二维数组的索引

arr2 = np.arange(10).reshape(2,5)
arr2
array([[0, 1, 2, 3, 4],
       [5, 6, 7, 8, 9]])

arr2[1][1]   # 第一个[1]表示第二行,第二个[2]表示第二列
6

arr2[1,1]    # 第一个是行,第二个是列
6

arr2[:,2]    # 第一个是行,第二个是列
array([2, 7])

布尔索引

a3
array([[ 0,  1,  2,  3,  4,  5],
       [ 6,  7,  8,  9, 10, 11],
       [12, 13, 14, 15, 16, 17],
       [18, 19, 20, 21, 22, 23]])


a3 < 10
array([[ True,  True,  True,  True,  True,  True],
       [ True,  True,  True,  True, False, False],
       [False, False, False, False, False, False],
       [False, False, False, False, False, False]])


a3[a3<10]
array([0, 1, 2, 3, 4, 5, 6, 7, 8, 9])


~(a3<10)
array([[False, False, False, False, False, False],
       [False, False, False, False,  True,  True],
       [ True,  True,  True,  True,  True,  True],
       [ True,  True,  True,  True,  True,  True]])


a3[~(a3<10)]
array([10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23])


a3[(a3>10) & (a3<20)]
array([11, 12, 13, 14, 15, 16, 17, 18, 19])

where索引改值

a4 = np.arange(10).reshape(2,5)
a4
array([[0, 1, 2, 3, 4],
       [5, 6, 7, 8, 9]])


arr = np.where(a4<5, 1, 0)     # 如果小于5就改为1,否则改为0
arr
array([[1, 1, 1, 1, 1],
       [0, 0, 0, 0, 0]])
7-2 切片
a3 = np.arange(0,24).reshape((4,6))
a3
array([[ 0,  1,  2,  3,  4,  5],
       [ 6,  7,  8,  9, 10, 11],
       [12, 13, 14, 15, 16, 17],
       [18, 19, 20, 21, 22, 23]])

# 连续切片
a3[:2]
array([[ 0,  1,  2,  3,  4,  5],
       [ 6,  7,  8,  9, 10, 11]])

a3[:2,:2]
array([[0, 1],
       [6, 7]])


# 不连续切片
a4 = np.arange(10)
a4
array([0, 1, 2, 3, 4, 5, 6, 7, 8, 9])

a4[0: 6: 2]
array([0, 2, 4])

7-3 堆叠数组
a1 = np.array([[1,1], [2,2]])
a1
array([[1, 1],
       [2, 2]])

a2 = np.array([[3,3], [4,4]])
a2
array([[3, 3],
       [4, 4]])

垂直堆叠 np.vstack()

np.vstack((a1,a2))
array([[1, 1],
       [2, 2],
       [3, 3],
       [4, 4]])

水平堆叠 np.hstack()

np.hstack((a1,a2))
array([[1, 1, 3, 3],
       [2, 2, 4, 4]])
7-4 拆分数组
a3 = np.arange(1, 25).reshape(2, 12)
a3
array([[ 1,  2,  3,  4,  5,  6,  7,  8,  9, 10, 11, 12],
       [13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24]])

np.hsplit()

# 拆分为三个形状相等的数组
np.hsplit(a3, 3)
[array([[ 1,  2,  3,  4],
        [13, 14, 15, 16]]), array([[ 5,  6,  7,  8],
        [17, 18, 19, 20]]), array([[ 9, 10, 11, 12],
        [21, 22, 23, 24]])]


# 在第三列和第四列之后拆分数组
np.hsplit(a3, (3,4))
[array([[ 1,  2,  3],
        [13, 14, 15]]), array([[ 4],
        [16]]), array([[ 5,  6,  7,  8,  9, 10, 11, 12],
        [17, 18, 19, 20, 21, 22, 23, 24]])]
7-5 深浅复制

浅复制 np.view()

a4 = np.array([[1,2,3], [4,5,6]])
a4
array([[1, 2, 3],
       [4, 5, 6]])

a4.view()[0,1] = 99

a4
array([[ 1, 99,  3],
       [ 4,  5,  6]])

深复制 np.copy()

a5 = np.array([[1,2,3], [4,5,6]])
a5
array([[1, 2, 3],
       [4, 5, 6]])

a5.copy()[0,1] = 100

a5
array([[1, 2, 3],
       [4, 5, 6]])
7-6 数组的运算
data = np.array([22, 44])
data
array([22, 44])

ones = np.array([2, 4])
ones
array([2, 4])
# 加法
data + ones
array([24, 48])


# 减法
data - ones
array([20, 40])


# 乘法
data * ones
array([ 44, 176])


# 除法
data / ones
array([11., 11.])


# 整除
data // ones
array([11, 11], dtype=int32)


# 取模
data % ones
array([0, 0], dtype=int32)

求和 sum()

# 一维数组求和 sum()
a = np.array([1,2,3,4])
a.sum()
10


# 二维数组求和 sum(axis)
arr = np.array([[1,2,3], [4,5,6]])
arr.sum(axis=0)    # axis=0表示各个列上的求和
array([5, 7, 9])

arr.sum(axis=1)    # axis=1表示各个行上的求和
array([ 6, 15])

求最大值 max()

# 一维数组求最大值  max()
a = np.array([1,2,3,4])
a.max()
4


# 二维数组求最大值  max(axis)
arr = np.array([[1,2,3], [4,5,6]])
arr.max(axis=0)    # axis=0表示各个列上的求最大值  
array([4, 5, 6])

arr.max(axis=1)    # axis=1表示各个行上的求最大值
array([3, 6])

求最小值 min()

# 一维数组求最小值  min()
a = np.array([1,2,3,4])
a.min()
1


# 二维数组求最大值  min(axis)
arr = np.array([[1,2,3], [4,5,6]])
arr.min(axis=0)    # axis=0表示各个列上的求最小值 
array([1, 2, 3])

arr.min(axis=1)    # axis=1表示各个行上的求最小值
array([1, 4])
8-矩阵(二维数组)
data = np.array([[1, 2], [3, 4], [5, 6]])
data
array([[1, 2],
       [3, 4],
       [5, 6]])

矩阵(也就是二维数组)的索引,切片跟前面一样
重点讲下聚合矩阵:

还可以在这些函数里面加一个转轴参数axis axis=0表示行 axis=1表示列

9-计数

一维数组

# 出现哪些数(相当于返回去重后的结果)
a = np.array([11, 11, 12, 13, 14, 15, 16, 17, 12, 13, 11, 14, 18, 19, 20])
np.unique(a)
array([11, 12, 13, 14, 15, 16, 17, 18, 19, 20])


# 第一次出现的索引
unique_values, indices_list = np.unique(a, return_index=True)
indices_list
array([ 0,  2,  3,  4,  5,  6,  7, 12, 13, 14], dtype=int64)


# 出现的次数
unique_values, occurrence_count = np.unique(a, return_counts=True)
occurrence_count
array([3, 2, 2, 2, 1, 1, 1, 1, 1, 1], dtype=int64)

二维数组
注意:如果未传递 axis 参数,则 2D 数组将被拼合。

# 出现哪些数(相当于返回去重后的结果)
a_2d = np.array([[1, 2, 3, 4], [5, 6, 7, 8], [9, 10, 11, 12], [1, 2, 3, 4]])
np.unique(a_2d)
array([ 1,  2,  3,  4,  5,  6,  7,  8,  9, 10, 11, 12])


# 出现的数(指定行)
np.unique(a_2d, axis=0)
array([[ 1,  2,  3,  4],
       [ 5,  6,  7,  8],
       [ 9, 10, 11, 12]])

# 出现的数(指定列)
np.unique(a_2d, axis=1)
array([[ 1,  2,  3,  4],
       [ 5,  6,  7,  8],
       [ 9, 10, 11, 12],
       [ 1,  2,  3,  4]])



# 获取唯一行,索引位置和出现次数,出现的次数
unique_rows, indices, occurrence_count = np.unique(a_2d, axis=0, return_counts=True, return_index=True)

# 出现的行
unique_rows
array([[ 1,  2,  3,  4],
       [ 5,  6,  7,  8],
       [ 9, 10, 11, 12]])

# 第一次的出现的行索引
indices
array([0, 1, 2], dtype=int64)

# 出现的次数
occurrence_count
array([2, 1, 1], dtype=int64)
10-反转数组

一维数组

arr = np.array([1, 2, 3, 4, 5, 6, 7, 8])
np.flip(arr)
array([8, 7, 6, 5, 4, 3, 2, 1])

二维数组

arr_2d = np.array([[1, 2, 3, 4], [5, 6, 7, 8], [9, 10, 11, 12]])
arr_2d
array([[ 1,  2,  3,  4],
       [ 5,  6,  7,  8],
       [ 9, 10, 11, 12]])

# 行和列都反转
np.flip(arr_2d)
array([[12, 11, 10,  9],
       [ 8,  7,  6,  5],
       [ 4,  3,  2,  1]])

# 仅反转行
np.flip(arr_2d, axis=0)
array([[ 9, 10, 11, 12],
       [ 5,  6,  7,  8],
       [ 1,  2,  3,  4]])

# 仅反转列
np.flip(arr_2d, axis=1)
array([[ 4,  3,  2,  1],
       [ 8,  7,  6,  5],
       [12, 11, 10,  9]])

# 仅反转某一行
np.flip(arr_2d[1])
array([8, 7, 6, 5])

欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/langs/718777.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-04-25
下一篇 2022-04-25

发表评论

登录后才能评论

评论列表(0条)

保存