learn numpy --学习笔记1

网易云课堂:
https://study.163.com/course/courseMain.htm?courseId=1003240004
莫烦主页:
https://morvanzhou.github.io/tutorials/data-manipulation/np-pd/

import numpy as np

array = np.array([[1,2,3],[2,3,4]])  #列表转化为矩阵
print(array)

print('number of dim:',array.ndim)  # 维度
print('shape :',array.shape)    # 行数和列数
print('size:',array.size)   # 元素个数
import numpy as np

# array:创建数组
# dtype:指定数据类型
# zeros:创建数据全为0
# ones:创建数据全为1
# empty:创建数据接近0
# arrange:按指定范围创建数据
# linspace:创建线段

# a = np.array([2,23,4])  # list 1d
# print(a)

# a = np.array([2,23,4],dtype=np.int)
# # a = np.array([2,23,4],dtype=np.int16)
# # a = np.array([2,23,4],dtype=np.int32)
# # a = np.array([2,23,4],dtype=np.int64)
# print(a.dtype)

# a = np.array([2,23,4],dtype=np.float)
# # a = np.array([2,23,4],dtype=np.float32)
# # a = np.array([2,23,4],dtype=np.float64)
# print(a.dtype)

# a = np.array([[2,23,4],[2,32,4]])  # 2d 矩阵 2行3列
# print(a)

# a = np.zeros((3,4)) # 数据全为0,3行4列
# print(a)

# a = np.ones((3,4),dtype = np.int)   # 数据为1,3行4列
# print(a)

# a = np.empty((3,4)) # 数据为empty,3行4列
# #创建全空数组, 其实每个值都是接近于零的数:
# print(a)

# a = np.arange(10,20,2) # 10-19 的数据,2步长
# print(a)

# a = np.arange(12).reshape((3,4))    # 3行4列,0到11
# print(a)

# #用 linspace 创建线段型数据:
# a = np.linspace(1,10,20)    # 开始端1,结束端10,且分割成20个数据,生成线段
# print(a)

a = np.linspace(1,10,20).reshape((5,4)) # 更改shape
print(a)
import numpy as np

# a=np.array([10,20,30,40])   # array([10, 20, 30, 40])
# b=np.arange(4)                 # array([0, 1, 2, 3])

# c=a-b   # array([10, 19, 28, 37])
# c=a+b   # array([10, 21, 32, 43])
# c=a*b   # array([  0,  20,  60, 120])   #对应位置的数字相乘,不是真正的矩阵乘法

# c=b**2  # array([0, 1, 4, 9])   求各位置数字的平方,同理可求n次方

# c=10*np.sin(a)  
# # array([-5.44021111,  9.12945251, -9.88031624,  7.4511316 ])

# print(b<3)  
# # array([ True,  True,  True, False], dtype=bool)  判断b中各元素与3的大小

# a=np.array([[1,1],[0,1]])
# b=np.arange(4).reshape((2,2))

# print(a)
# # array([[1, 1],
# #       [0, 1]])

# print(b)
# # array([[0, 1],
# #       [2, 3]])

# c_dot = np.dot(a,b)   #这是真正的矩阵乘法
# # array([[2, 4],
# #       [2, 3]])

# c_dot_2 = a.dot(b)   #这是矩阵乘法的另一种表示
# # array([[2, 4],
# #       [2, 3]])

a=np.random.random((2,4))
# print(a)
# array([[ 0.94692159,  0.20821798,  0.35339414,  0.2805278 ],
#       [ 0.04836775,  0.04023552,  0.44091941,  0.21665268]])

# np.sum(a)   # 4.4043622002745959    对a中各个位置求和
# np.min(a)   # 0.23651223533671784    对a中各个位置求min
# np.max(a)   # 0.90438450240606416  对a中各个位置求max

#如果你需要对行或者列进行查找运算,就需要在上述代码中为 axis 进行赋值。 
#当axis的值为0的时候,将会以列作为查找单元, 当axis的值为1的时候,将会以行作为查找单元。

print("a =",a)
# a = [[ 0.23651224  0.41900661  0.84869417  0.46456022]
# [ 0.60771087  0.9043845   0.36603285  0.55746074]]

print("sum =",np.sum(a,axis=1))    #对每行求和
# sum = [ 1.96877324  2.43558896]

print("min =",np.min(a,axis=0))    #对每列求min
# min = [ 0.23651224  0.41900661  0.36603285  0.46456022]

print("max =",np.max(a,axis=1))   #对每行求max
# max = [ 0.84869417  0.9043845 ]
import numpy as np

A = np.arange(2,14).reshape((3,4)) 

# array([[ 2, 3, 4, 5]
#         [ 6, 7, 8, 9]
#        [10,11,12,13]])
         
# print(np.argmin(A))    # 0     求A中最小值的位置参数,即第0个数字
# print(np.argmax(A))    # 11   求A中最大值的位置参数,即第11个数字

# print(np.mean(A))        # 7.5   求A中所有元素的均值
# print(np.average(A))     # 7.5
# print(A.mean())          # 7.5   这三种方式的作用是一样的

# print(A.median())       # 7.5  同样的,我们可以写出求解中位数的函数
# # 显示错误:AttributeError: 'numpy.ndarray' object has no attribute 'median'
# # 通过dir(A)查看,A 还真没有median这个属性,但是视频里可以运行,可能是版本问题

# from numpy import *
# print(median(A))    #可以这样实现

# print(np.cumsum(A))    
# #累加函数。在cumsum()函数中:生成的每一项矩阵元素均是从原矩阵首项累加到对应项的元素之和。
# # [2 5 9 14 20 27 35 44 54 65 77 90]

# #相应的有累差运算函数:该函数计算的便是每一行中后一项与前一项之差。
# #故一个3行4列矩阵通过函数计算得到的矩阵便是3行3列的矩阵。
# print(np.diff(A))    
# # [[1 1 1]
# #  [1 1 1]
# #  [1 1 1]]

# print(np.nonzero(A))   #求A中非0元素的位置
# #这个函数将所有非零元素的行与列坐标分割开,重构成两个分别关于行和列的矩阵。
# # (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]))
# #上面结果中,第一个array是行坐标(如第一个数字是0),第二个array是列坐标(如第一个数字是0)
# #这就表示A中位置第0行第0列的元素是nonzero


# #同样的,我们可以对所有元素进行仿照列表一样的排序操作
# A = np.arange(14,2, -1).reshape((3,4)) 

# # array([[14, 13, 12, 11],
# #       [10,  9,  8,  7],
# #       [ 6,  5,  4,  3]])

# print(np.sort(A))    #但这里的排序函数仍然仅针对每一行进行从小到大排序操作:

# # array([[11,12,13,14]
# #        [ 7, 8, 9,10]
# #        [ 3, 4, 5, 6]])

# print(msort(A))  #在列方向上排序

# # [[ 6  5  4  3]
# #  [10  9  8  7]
# #  [14 13 12 11]]

A = np.arange(14,2, -1).reshape((3,4)) 
# array([[14, 13, 12, 11],
#        [10,  9,  8,  7],
#       [ 6,  5,  4,  3]])

# print(np.transpose(A))     #矩阵的转置有两种表示方法:
# print(A.T)
# # array([[14,10, 6]
# #        [13, 9, 5]
# #        [12, 8, 4]
# #        [11, 7, 3]])
# # array([[14,10, 6]
# #        [13, 9, 5]
# #        [12, 8, 4]
# #        [11, 7, 3]])

print(np.clip(A,5,9))  
#将A中元素进行替换,小于5的都换成5,大于9的都换成9 ,只保留5到9之间的原始数据 
# array([[ 9, 9, 9, 9]
#        [ 9, 9, 8, 7]
#        [ 6, 5, 5, 5]])


import numpy as np

# A = np.arange(3,15)
# # array([3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14])   
# print(A[3])    # 6

# A = np.arange(3,15).reshape((3,4))
# """
# array([[ 3,  4,  5,  6]
#        [ 7,  8,  9, 10]
#        [11, 12, 13, 14]])
# """     
# print(A[2])       #实际上这时的A[2]对应的就是矩阵A中第三行(从0开始算第一行)的所有元素。 
# # [11 12 13 14]
# print(A[1][1])    # 8
# print(A[1, 1])    # 8
# print(A[1, 1:3])    # [8 9]  这一表示形式即针对第二行中第2到第4列元素进行切片输出(不包含第4列)

# for row in A:    #此时它会逐行进行打印操作。如果想进行逐列打印,就需要稍稍变化一下:
#     print(row)
# """    
# [ 3,  4,  5, 6]
# [ 7,  8,  9, 10]
# [11, 12, 13, 14]
# """
# print(A.T)

# for column in A.T:   #  对A进行转置,再将得到的矩阵逐行输出即可得到原矩阵的逐列输出
#     print(column)
# """  
# [ 3,  7,  11]
# [ 4,  8,  12]
# [ 5,  9,  13]
# [ 6, 10,  14]
# """

# A = np.arange(3,15).reshape((3,4))
         
# print(A.flatten())  # 不可以 print(A.flat()) ,它是个迭代器,不可打印
# # array([3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14])

# for item in A.flat:
#     print(item)
# #这一脚本中的flatten是一个展开性质的函数,将多维的矩阵进行展开成1行的数列。而flat是一个迭代器,本身是一个object属性。




import numpy as np
# A = np.array([1,1,1])    #A是一个序列,并不是个矩阵
# B = np.array([2,2,2])

# print(A)
# print(B)
# print(np.vstack((A,B)))    # vertical stack  垂直方向上合并
# """
# [[1,1,1]
#  [2,2,2]]
# """


# C = np.vstack((A,B))      
# print(A.shape,C.shape)
# # (3,) (2,3)
# D = np.hstack((A,B))       # horizontal stack  水平合并
# print(D)
# # [1,1,1,2,2,2]
# print(A.shape,D.shape)
# # (3,) (6,)

# # print(A.T)  #这并不能显示一列三个1

# print(A[np.newaxis,:])  #这句话把A变成一行三列的一个矩阵
# # [[1 1 1]]
# print(A[np.newaxis,:].shape)   #打印A的矩阵类型
# # (1,3)
# print(A[:,np.newaxis])   # 把A变成一个三行一列的矩阵
# """
# [[1]
# [1]
# [1]]
# """
# print(A[:,np.newaxis].shape)   #打印A的矩阵类型
# # (3,1)


import numpy as np
A = np.array([1,1,1])[:,np.newaxis]
B = np.array([2,2,2])[:,np.newaxis]
# print(A)
# # [[1]
# #  [1]
# #  [1]]
# print(B)
# # [[2]
# #  [2]
# #  [2]]

# C = np.vstack((A,B))   # vertical stack
# D = np.hstack((A,B))   # horizontal stack

# print(C)
# '''
# [[1]
#  [1]
#  [1]
#  [2]
#  [2]
#  [2]]
# '''
# print(D)
# '''
# [[1 2]
#  [1 2]
#  [1 2]]
#  '''
# print(A.shape,C.shape,D.shape)
# # (3, 1) (6, 1) (3, 2)

C = np.concatenate((A,B,B,A),axis=0)  #在列方向合并
print(C)       #axis参数很好的控制了矩阵的纵向或是横向打印,相比较vstack和hstack函数显得更加方便
'''
[[1]
 [1]
 [1]
 [2]
 [2]
 [2]
 [2]
 [2]
 [2]
 [1]
 [1]
 [1]]
'''

D = np.concatenate((A,B,B,A),axis=1)   #在行方向合并
print(D)
 '''
 [[1 2 2 1]
 [1 2 2 1]
 [1 2 2 1]]
 '''



import numpy as np
A = np.arange(12).reshape((3, 4))
# print(A)
'''
[[ 0  1  2  3]
 [ 4  5  6  7]
 [ 8  9 10 11]]
'''

# print(np.split(A, 2, axis=1))  #纵向均分矩阵
# print(np.split(A, 3, axis=0))    #横向均分矩阵

# print(np.split(A, 3, axis=1))
#范例的Array只有4列,只能等量对分,因此输入以上程序代码后Python就会报错


# print(np.array_split(A, 3, axis=1))
#在机器学习时经常会需要将数据做不等量的分割,因此解决办法为np.array_split()

#在Numpy里还有np.vsplit()与横np.hsplit()方式可用。
# print(np.vsplit(A, 3))  #等于 print(np.split(A, 3, axis=0))
print(np.hsplit(A, 2)) #等于 print(np.split(A, 2, axis=1))

#  Numpy copy & deep copy

import numpy as np

a = np.arange(4)
# array([0, 1, 2, 3])

# b = a
# c = a
# d = b
# #改变a的第一个值,b、c、d的第一个值也会同时改变。
# a[0] = 11
# print(a)
# # array([11,  1,  2,  3])
# # 确认b、c、d是否与a相同。
# b is a  # True
# c is a  # True
# d is a  # True
# #同样更改d的值,a、b、c也会改变。
# d[1:3] = [22, 33]   # array([11, 22, 33,  3])
# print(a)            # array([11, 22, 33,  3])
# print(b)            # array([11, 22, 33,  3])
# print(c)            # array([11, 22, 33,  3])

#copy() 的赋值方式没有关联性
b = a.copy()    # deep copy
print(b)        # array([11, 22, 33,  3])
a[3] = 44
print(a)        # array([11, 22, 33, 44])
print(b)        # array([11, 22, 33,  3])

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值