numpy总结

numpy的属性

numpy是基于矩阵的运算

import numpy as np

#将一个列表转换为矩阵
array = np.array([[1,2,3],
                  [2,3,4]])
print(type(array))  # <class 'numpy.ndarray'>
print(array.ndim)  # 维度数 2
print(array.shape)  # 形状 (2,3)
print(array.size)  # 大小 6  总共的元素个数
print(array.dtype)  # 元素类型  int

如果要修改dtype的属性的操作办法是

array = array.astype(np.int16) 

numpy的创建array

import numpy as np

# 根据列表创建array  dtype表示元素的类型np.int8 np.int16 np.int32 np.int64  np.float64 np.float32 np.float16
a = np.array([[1,2,3],[4,5,6]],dtype=np.int32)
print(a.dtype)  # int32
# 使用np.zeros()创建全0的矩阵  同理可以使用np.ones()定义全1的矩阵  也可以使用参数dtype定义元素类型
# np.empty()  定义的是非常接近0的矩阵
a = np.zeros((2,3,4))  # 参数为形状,需要使用()括起来
print(a)
# [[[0. 0. 0. 0.]
#   [0. 0. 0. 0.]
#   [0. 0. 0. 0.]]
#
#  [[0. 0. 0. 0.]
#   [0. 0. 0. 0.]
#   [0. 0. 0. 0.]]]

# np.arange()  如果只有一个参数15,则相当于np.arange(0,15,1)
a = np.arange(10,18,2)  # 起始值为10,终止值为18(不包括18),步长为2的一维矩阵
print(a)  # [10 12 14 16]
# 通过使用reshape()可以重新定义矩阵的维度
print(np.arange(12).reshape((3,4)))
# [[ 0  1  2  3]
#  [ 4  5  6  7]
#  [ 8  9 10 11]]

# np.linspace() 按线段生成,也就是等距离生成5个数在[1,10]之间
print(np.linspace(1,10,5))  # [ 1.    3.25  5.5   7.75 10.  ]

numpy的基础运算

import numpy as np

a1 = np.array([10,20,30,40])
a2 = np.array([0,1,2,3])
# 加减乘除
print(a1+a2)  # [10 21 32 43]  加减乘除是对应元素相加减,a1**3这时a1的三次方
# 三角函数 np.sin() np.cos() np.tan()
print(np.tan(a2))
# 判断运算 > < >= <= ==
a3 = np.array([[1,2,3],[2,3,4]])
print(a3 == 3)  # 返回一个矩阵形式,满足条件为True,否则为False
# [[False False  True]
#  [False  True False]]

# 矩阵乘
a1 = np.array([[1,2],[2,3]])
a2 = np.array([[2,4],[3,5]])
print(a1.dot(a2))  # np.dot(a1,a2)
# [[ 8 14]
#  [13 23]]

# 求和np.sum() 最小值np.min()  最大值np.max()
a = np.array([[1,2],
              [3,4]])
print(np.sum(a))  # 在整个矩阵上求和  10
print(np.sum(a,axis=0))  # axis表示维度  0是按列求和 [4 6]
print(np.sum(a,axis=1))  # 1 按行求和  [3 7]

a = np.arange(36).reshape((2,6,3))
b = np.arange(36).reshape((2,6,3))
b = b- 2
print(np.abs(b-a))
print(np.sum((b-a)>-3))
print(np.sum(a-b,axis=2))
print(np.sum(a>20))

#获得矩阵最大值最小值的索引,平均值,中位数,累加和,累差,非0的位置,逐行排序,矩阵转置,矩阵片段转换
A = np.arange(2,14).reshape((3,4))
# 可以使用axis表示指定行还是列,0按列,1按行
print(np.argmin(A))  # 返回最小值的索引  0
print(np.argmax(A))  # 返回最大值的索引  11
print(np.mean(A))  # 等价于A.mean() 返回矩阵的平均值  7.5
print(np.median(A))  # 返回矩阵的中位数 7.5
print(A)
# [[ 2  3  4  5]
#  [ 6  7  8  9]
#  [10 11 12 13]]
print(np.cumsum(A))  # 返回累加和,也就是前缀和  [ 2  5  9 14 20 27 35 44 54 65 77 90]
print(np.diff(A))  # 返回的是行数相同,但是列数减1,相邻两个值的差
# [[1 1 1]
#  [1 1 1]
#  [1 1 1]]
print(np.nonzero(A))  # 返回两个数组,第一个是非0的行,第二个是非0的列
# (array([0, 0, 0, 0, 1, 1, 1, 1, 2, 2, 2, 2], dtype=int64), array([0, 1, 2, 3, 0, 1, 2, 3, 0, 1, 2, 3], dtype=int64))
print(np.sort(A))  # 逐行排序,也就是只在单行内进行排序
print(np.transpose(A))  # 矩阵的转置  等价于A.T
# [[ 2  6 10]
#  [ 3  7 11]
#  [ 4  8 12]
#  [ 5  9 13]]
print(np.clip(A,5,9))  # 也就是让矩阵中所有小于5的值变为0,所有大于9的值变为9,其余值不变
# [[5 5 5 5]
#  [6 7 8 9]
#  [9 9 9 9]]

 

numpy的索引

 import numpy as np

A = np.arange(2,14)
print(A[2])  # 4
A = A.reshape((3,4))
print(A[2])  # [10 11 12 13]  整个第三行的值  等价于A[2,:]
print(A[2][1])  # 等价于A[2,1]  11  第三行第二列的值
for row in A:  # 直接迭代矩阵,默认的是迭代行,每次输出一行的内容
    print(row)
# [2 3 4 5]
# [6 7 8 9]
# [10 11 12 13]
for column in A.T:  # 通过转置迭代每一列
    print(column)
# [ 2  6 10]
# [ 3  7 11]
# [ 4  8 12]
# [ 5  9 13]
print(A.flatten())  # 变成一行  [ 2  3  4  5  6  7  8  9 10 11 12 13]
# 遍历每一个元素
for item in A.flat:  # A.flat和A.flatten()一样,不过返回的是一个迭代器
    print(item,end=" ")  # 2 3 4 5 6 7 8 9 10 11 12 13

 

numpy的array合并

import numpy as np

A = np.array([1,1,1])  # 不能使用A.T因为这时序列,不是矩阵,[[1,1,1]]是矩阵
B = np.array([2,2,2])
print(np.vstack((A,B)))  # 上下合并
# [[1 1 1]
#  [2 2 2]]
print(np.hstack((A,B)))  # 左右合并
# [1 1 1 2 2 2]
print(A[np.newaxis,:])  # 加一个维度
# [[1 1 1]]
print(A[:,np.newaxis])
# [[1]
#  [1]
#  [1]]
A = np.array([[1],[1]])
B = np.array([[2],[2]])
print(np.concatenate((A,B,A),axis=0))  # 0代表行合并
# [[1]
#  [1]
#  [2]
#  [2]
#  [1]
#  [1]]
print(np.concatenate((A,B,A),axis=1))
# [[1 2 1]
#  [1 2 1]]

 

numpy的array分割

import numpy as np

A = np.arange(12).reshape((3,4))
print(np.split(A,3,axis=0))  # 按行分割,将矩阵A均分为3份,如果不能整除则报错
# [array([[0, 1, 2, 3]]), array([[4, 5, 6, 7]]), array([[ 8,  9, 10, 11]])]
print(np.split(A,2,axis=1))
# [array([[0, 1],
#        [4, 5],
#        [8, 9]]), array([[ 2,  3],
#        [ 6,  7],
#        [10, 11]])]
print(np.array_split(A,3,axis=1))  # 可以实现不均等分割
# [array([[0, 1],
#        [4, 5],
#        [8, 9]]), array([[ 2],
#        [ 6],
#        [10]]), array([[ 3],
#        [ 7],
#        [11]])]
print(np.vsplit(A,3))  # [array([[0, 1, 2, 3]]), array([[4, 5, 6, 7]]), array([[ 8,  9, 10, 11]])]
print(np.hsplit(A,2))
# [array([[0, 1],
#        [4, 5],
#        [8, 9]]), array([[ 2,  3],
#        [ 6,  7],
#        [10, 11]])]

 

numpy的copy和deep copy

import numpy as np

a = np.arange(4)
# 单纯的=的赋值相当于引用,也就是相当于一个矩阵的两个名字而已,说到底还是一个矩阵
# 所以改变a,那么b的值也会相应的发生改变
# 使用a.copy()赋值表示知识将值赋值过去,相当于重新生成了一个新的矩阵过去,那么改变a,则c的值不会发生改变
# 对于=,使用 a is b的结果是True,对于a.copy() 使用a is c的结果是False
b = a
a[0] = 5
print(a)  # [5 1 2 3]
print(b)  # [5 1 2 3]
print(a is b)  # True
c = a.copy()
a[0] = 10
print(c)  # [5 1 2 3]
print(c is a)  # False

 

如果要修改dtype的属性的操作办法是

array = array.astype(np.int16)

posted @ 2022-02-02 13:29  白菜茄子  阅读(31)  评论(0编辑  收藏  举报