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表示列
一维数组
# 出现哪些数(相当于返回去重后的结果)
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])
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)