bilibili视频学习-numpy

学习python的numpy库的一些笔记

import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
%matplotlib inline

numpy的属性

  1. array.ndim
  2. array.shape
  3. array.size
array = np.array([[1,2,3],
 [4,5,6]])
print(array)
[[1 2 3]
 [4 5 6]]
print('number of dim:',array.ndim)
print('shape:',array.shape)
print('size:',array.size)
number of dim: 2
shape: (2, 3)
size: 6

numpy创建array

  1. np.array([],dtype = ?)
  2. np.zeros()
  3. np.ones()
  4. np.empty()
  5. np.linspace()
  6. np.arange()
a = np.array([1,122,34,24,325,43,67],dtype = np.int64)
print(a)
[  1 122  34  24 325  43  67]
a = np.array([12,2134,2,453,6,45],dtype = np.float64)
print(a)
print(a.dtype)
[1.200e+01 2.134e+03 2.000e+00 4.530e+02 6.000e+00 4.500e+01]
float64
a = np.array([[1,2,3,4],[5,6,7,8],[9,10,11,12]])
a
array([[ 1,  2,  3,  4],
       [ 5,  6,  7,  8],
       [ 9, 10, 11, 12]])
# 声称全部为0的数列
a = np.zeros((3,4),dtype = np.int64)
a
array([[0, 0, 0, 0],
       [0, 0, 0, 0],
       [0, 0, 0, 0]])
a = np.ones((3,4))
a
array([[1., 1., 1., 1.],
       [1., 1., 1., 1.],
       [1., 1., 1., 1.]])
a = np.empty((3,4))
print(a)  # 为什么我调用empty生成的是一个只含有1的矩阵
[[1. 1. 1. 1.]
 [1. 1. 1. 1.]
 [1. 1. 1. 1.]]
# arange 起始值,终止值-1,步长
a = np.arange(10,20,2)
a
array([10, 12, 14, 16, 18])
a = np.arange(12).reshape((3,4))  # 传入reshape的一定得是个加括号的shape
a
array([[ 0,  1,  2,  3],
       [ 4,  5,  6,  7],
       [ 8,  9, 10, 11]])
# linspace 起始值,终止值,元素个数
a = np.linspace(1,10,10,dtype = np.int64)
a
array([ 1,  2,  3,  4,  5,  6,  7,  8,  9, 10])
# array对象均可以调用reshape
# linspace 起始值,终止值,元素个数
a = np.linspace(1,10,10,dtype = np.int64).reshape((2,5))
print(a)
[[ 1  2  3  4  5]
 [ 6  7  8  9 10]]

numpy基础运算

  1. 数学函数调用
  2. c[c<5]
  3. a*b
  4. np.dot(a,b) and a.dot(b)
  5. np.random.random(size of array)
  6. np.argmin(A),A.min()
  7. np.argmax(A),A.max()
  8. np.mean(A),A.mean(),np.average(A)
  9. np.median(A)
  10. np.cumsum(A)
  11. np.diff(A)
  12. np.nonzero(A)
  13. np.sum np.min np.mean np.max axis = ?
  14. np.sort
  15. np.transpose(A) and A.T
  16. np.clip
a = np.array([10,20,30,40])
b = np.arange(4)
c = a-b
print(a,b,c)
[10 20 30 40] [0 1 2 3] [10 19 28 37]
# 函数调用
c = 10*np.sin(a)
c
array([-5.44021111,  9.12945251, -9.88031624,  7.4511316 ])
# numpy对矩阵元素的筛选
print(c<5)
d = c<5
c[d]
[ True False  True False]





array([-5.44021111, -9.88031624])
select = np.arange(25).reshape((5,5))
a = np.ones(25).reshape((5,5))
select = select>4
print(a[select])  # 没达到我的预期
[1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1.]
# 矩阵乘法
a = np.array([[1,0],[0,1]])
b = np.arange(4).reshape((2,2))
# 逐个相乘
c = a*b
print(c)
# 矩阵乘法
c = np.dot(a,b)  # numpy里面矩阵乘法需要调用np.dot方法
print(c)
# or
a.dot(b)  # 这样也可以进行矩阵乘法
[[0 0]
 [0 3]]
[[0 1]
 [2 3]]





array([[0, 1],
       [2, 3]])
a = np.random.random((4,4))
a[a>0.5]
# a.reshape(1,16)
array([0.75071659, 0.54349795, 0.53320956, 0.64108411, 0.86867602,
       0.74984389, 0.77493445, 0.8542434 , 0.66811161, 0.72019505,
       0.98319772])
# 求和之类的
print(np.sum(a),np.min(a),np.max(a))
# 找到某一行的最大最小
a.reshape(2,8)  # 这里的逻辑比较奇怪,调用reshape无法改变a本身,而是返回一个新的数组
print(np.sum(a,axis = 0))  # axis = 0 代表行
print(np.sum(a,axis = 1))  # axis = 1 代表列
9.532522256454564 0.014624980614642125 0.9831977219683379
[2.27119303 2.96623915 1.84672342 2.44836666]
[1.95086702 2.79281358 2.40271229 2.38612936]
a = a.reshape(2,8)
print(np.sum(a,axis = 1))
print(np.sum(a,axis = 0))
[4.7436806  4.78884165]
[1.06987186 1.60495999 0.96342242 0.71532505 1.20132117 1.36127916
 0.883301   1.73304161]
A = np.arange(2,14).reshape(3,4)
print(A)
print(np.argmin(A),A.min())  # 返回最小值的索引
print(np.argmax(A),A.max())
print(np.mean(A),A.mean(),np.average(A))
print(np.median(A))
print(np.cumsum(A))  # cumsum是一个好玩的方法,是在累加
print(np.diff(A))  # 累差 其实就是计算物理学到的差分
np.nonzero(A)  # 返回两个array,相当于(x1,x2,x3...) (y1,y2,y3...)
[[ 2  3  4  5]
 [ 6  7  8  9]
 [10 11 12 13]]
0 2
11 13
7.5 7.5 7.5
7.5
[ 2  5  9 14 20 27 35 44 54 65 77 90]
[[1 1 1]
 [1 1 1]
 [1 1 1]]





(array([0, 0, 0, 0, 1, 1, 1, 1, 2, 2, 2, 2]),
 array([0, 1, 2, 3, 0, 1, 2, 3, 0, 1, 2, 3]))
A = np.arange(14,2,-1).reshape(3,4)
print(A)
print(np.sort(A))  # 其实是逐行排序
print(np.transpose(A))  # 矩阵求转置
# numpy常用的矩阵乘法语法
A.T.dot(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]]
[[14 10  6]
 [13  9  5]
 [12  8  4]
 [11  7  3]]





array([[332, 302, 272, 242],
       [302, 275, 248, 221],
       [272, 248, 224, 200],
       [242, 221, 200, 179]])
# clip方法是我第一次见
print(np.clip(A,5,9))  # 将小于5的变为5,将大于9的变为9
print(np.mean(A,axis = 0))
[[9 9 9 9]
 [9 9 8 7]
 [6 5 5 5]]
[10.  9.  8.  7.]

numpy索引

  1. [:]
  2. flat and flatten()
A = np.arange(3,15).reshape(3,4)
print(A)
print('\n',A[2][1],'\n',A[2,1])
print('\n',A[:][1])  # 提取第二列
print(A[1,1:3])

for row in A:
    print(row)
    
for column in A.T:  # 通过转置来对列进行迭代
    print(column)
    
for item in A.flat:  # 将A转换为只有一行的数组
    print(item)
    
print(A.flat)  # 这里返回一个迭代器
print(A.flatten())  # 这里返回一个值
[[ 3  4  5  6]
 [ 7  8  9 10]
 [11 12 13 14]]

 12 
 12

 [ 7  8  9 10]
[8 9]
[3 4 5 6]
[ 7  8  9 10]
[11 12 13 14]
[ 3  7 11]
[ 4  8 12]
[ 5  9 13]
[ 6 10 14]
3
4
5
6
7
8
9
10
11
12
13
14
<numpy.flatiter object at 0x7f987c80ca00>
[ 3  4  5  6  7  8  9 10 11 12 13 14]

numpy array 合并

  1. vstack and hstack
  2. concatenate
A = np.array([1,1,1])
B = np.array([2,2,2])
# 上下合并
print(np.vstack((A,B)))  # vertical stack
# 左右合并
print(np.hstack((A,B)))  # horizontal stack
[[1 1 1]
 [2 2 2]]
[1 1 1 2 2 2]
print(A.T.shape)
A.T  # 没有实现我想象中的效果
A.reshape(3,1)  # 这样就实现了目的

# 还有第二种方法
print(A[:,np.newaxis])
(3,)
[[1]
 [1]
 [1]]
A = np.array([1,1,1])
A = A[:,np.newaxis]
B = np.array([2,2,2])
# print(np.hstack((A,B)),A,B)  # 会报错
B = B[:,np.newaxis]
print(np.hstack((A,B)))  # 没问题啦
[[1 2]
 [1 2]
 [1 2]]
A = np.array([1,1,1]).reshape(3,1)
B = np.array([2,2,2]).reshape(3,1)
#! array之间的合并问题
C = np.concatenate((A,B,A,B),axis = 1)
C
array([[1, 2, 1, 2],
       [1, 2, 1, 2],
       [1, 2, 1, 2]])

array分割

  1. split(,axis = ?)
  2. vsplit and hsplit
A = np.arange(12).reshape(3,4)
print(A)
[[ 0  1  2  3]
 [ 4  5  6  7]
 [ 8  9 10 11]]
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.split(A,3,axis = 1)
# ValueError: array split does not result in an equal division

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

copy & deep copy

deep copy需要依靠copy方法,甚至于切片的方法也是不够的

A = np.arange(3)
B = A
A[2] = 1
B  # 对A做处理,结果B的值也改变了,可见默认的浅拷贝只是建立一个引用而已
array([0, 1, 1])
assert B is A  # 实际上B就是A
B[1:3] = [22,33]
A
array([ 0, 22, 33])
# 如何实现deep copy呢?利用切片?
B = A[:]
B[1:3] = [0,1]
print(A)  # 看来切片是行不通的
B
[0 0 1]





array([0, 0, 1])
#! 必须采用copy方法
B = A.copy()
B[:] = [1,2,3]
print(A)
B
[0 0 1]





array([1, 2, 3])
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值