Python学习笔记3-Numpy

Numpy

学习莫烦python,非常感谢~记录自己在学习python过程中的点滴。

Numpy 安装

  • Anaconda安装
  • pip安装

Numpy的属性

  • ndim:维度
  • shape:行数和列数
  • size:元素个数

参考代码:

import numpy as np
array = np.array([[1,2,3],
                  [4,5,6]])
print(array)
print('number of dim:',array.ndim)  # 维度
print('shape :',array.shape)    # 行数和列数
print('size:',array.size)   # 元素个数

>>>
[[1 2 3]
 [4 5 6]]
number of dim: 2
shape : (2, 3)
size: 6

Numpy创建array

  • array:创建数组
  • dtype:指定数据类型
  • zeros:创建数据全为0
  • ones:创建数据全为1
  • empty:创建数据接近0
  • arrange:按指定范围创建数据
  • linspace:创建线段
  • reshape:改变数据的形状

创建数组:

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

指定数据类型:

a = np.array([2,23,4],dtype=np.int)
print(a.dtype)
>>> 
int 64

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

创建特定数据:

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

# 创建全零数组
a = np.zeros((3,4)) # 数据全为0,3行4列
>>>
array([[ 0.,  0.,  0.,  0.],
       [ 0.,  0.,  0.,  0.],
       [ 0.,  0.,  0.,  0.]])

# 创建全一数组, 同时也能指定这些特定数据的 dtype:
a = np.ones((3,4),dtype = np.int)   # 数据为1,3行4列
>>>
array([[1, 1, 1, 1],
       [1, 1, 1, 1],
       [1, 1, 1, 1]])

# 创建全空数组, 其实每个值都是接近于零的数:
a = np.empty((2,3)) # 数据为empty,2行3列
>>>
array([[9.14670441e-312 9.14670441e-312 9.14684911e-312]
       [9.14669205e-312 9.14685891e-312 9.14670438e-312]])

# 用 arange 创建连续数组:
a = np.arange(10,20,2) # 10-19 的数据,2步长
>>>
array([10, 12, 14, 16, 18])

# 使用 reshape 改变数据的形状
a = np.arange(12).reshape((3,4))    # 3行4列,0到11
>>>
array([[ 0,  1,  2,  3],
       [ 4,  5,  6,  7],
       [ 8,  9, 10, 11]])

# 用 linspace 创建线段型数据:
a = np.linspace(1,10,6)    # 开始端1,结束端10,且分割成6个数据,生成线段
>>>
array([ 1.   2.8  4.6  6.4  8.2 10. ])

# 同样也能进行 reshape 工作:
a = np.linspace(1,10,6).reshape((2,3)) # 更改shape
>>>
array([[ 1.   2.8  4.6]
       [ 6.4  8.2 10. ]])

Numpy 基础运算1

Numpy官方英文教材

  • +:加法运算
  • -:减法运算
  • *:乘法运算,对应矩阵中的点乘
  • **:乘方运算
  • /:除法运算
  • //:整除运算,结果为整数
  • np.dot():矩阵乘法
  • np.sin():正弦运算,类似的还有cos(),tanh()等其他三角函数
  • np.sum():求和运算,类似的还有min(),max()等运算
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=b**2  # 乘方
>>>
array([0, 1, 4, 9])

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

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

>>>
array([[1, 1],
      [0, 1]])
array([[0, 1],
      [2, 3]])

# 矩阵乘法
c_dot = np.dot(a,b)
c_dot_2 = a.dot(b)

>>>
array([[2, 4],
      [2, 3]])
array([[2, 4],       
      [2, 3]])

# sum(), min(), max()的使用
a=np.random.random((2,4))
print(a)
np.sum(a)   
np.min(a)   
np.max(a)   

>>>
array([[ 0.94692159,  0.20821798,  0.35339414,  0.2805278 ],
      [ 0.04836775,  0.04023552,  0.44091941,  0.21665268]])
4.4043622002745959   
0.23651223533671784
0.90438450240606416

# 坐标轴细节操作
print("sum =",np.sum(a,axis=1))
print("min =",np.min(a,axis=0))
print("max =",np.max(a,axis=1))

>>>
sum = [ 1.96877324  2.43558896]
min = [ 0.23651224  0.41900661  0.36603285  0.46456022]
max = [ 0.84869417  0.9043845 ]

Numpy 基础运算2

  • argmin():求矩阵中最小元素的索引
  • argmax():求矩阵中最大元素的索引
  • mean():求均值运算
  • median:求中位数运算
  • cumsum():累加和运算
  • diff():累差运算函数
  • nonzero():将所有非零元素的行与列坐标分割开,重构成两个分别关于行和列的矩阵。
  • sort():排序操作,默认对每一行进行从小到大排序操作
  • transpose():转置操作,把矩阵进行转置
  • clip():修剪运算,把Array数值范围限定在Array_min,Array_max之间。

参考代码:

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
print(np.argmax(A))    # 11

# 平均值
print(np.mean(A))        # 7.5
print(np.average(A))     # 7.5
print(A.mean())          # 7.5

# 中位数
print(A.median())       # 7.5

# 累加函数
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]]

# nonzero()函数
print(np.nonzero(A))    
# (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]))



import numpy as np
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(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]])

# clip()函数
print(A)
# array([[14,13,12,11]
#        [10, 9, 8, 7]
#        [ 6, 5, 4, 3]])

print(np.clip(A,5,9))    
# array([[ 9, 9, 9, 9]
#        [ 9, 9, 8, 7]
#        [ 6, 5, 5, 5]])

更多具体的使用细节请记得查阅Numpy官方英文教材

Numpy 的索引

  • [index]:一维索引
  • [row][col]:二维索引,也可写成[row,col]

一维索引:

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])         
# [11 12 13 14]

二维索引:

print(A[1][1])      # 8
print(A[1, 1])      # 8
print(A[1, 1:3])    # [8 9]

# 使用for循环打印行
for row in A:
    print(row)
"""    
[ 3,  4,  5, 6]
[ 7,  8,  9, 10]
[11, 12, 13, 14]
"""
# 使用for循环打印列
for column in A.T:
    print(column)
"""  
[ 3,  7,  11]
[ 4,  8,  12]
[ 5,  9,  13]
[ 6, 10,  14]
"""

# 迭代输出
print(A.flatten())   
# array([3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14])

for item in A.flat:
    print(item)
    
# 3
# 4
……
# 14

Numpy array 合并

  • np.vstack():对矩阵进行上下合并
  • np.hstack():对矩阵进行左右合并
  • np.newaxis():添加维度,例如把list变为array
  • np.concatenate():对矩阵进行合并,可以指定合并维度
    参考代码:
import numpy as np
A = np.array([1,1,1])
B = np.array([2,2,2])

# 垂直(上下)合并          
print(np.vstack((A,B)))    # vertical stack
"""
[[1,1,1]
 [2,2,2]]
"""
# 水平(左右)合并
D = np.hstack((A,B))       # horizontal stack
print(D)
# [1,1,1,2,2,2]

# 增加维度
print(A[np.newaxis,:])
# [[1 1 1]]
print(A[np.newaxis,:].shape)
# (1,3)
print(A[:,np.newaxis])
"""
[[1]
[1]
[1]]
"""
print(A[:,np.newaxis].shape)
# (3,1)

# 矩阵合并-纵向
C = np.concatenate((A,B,B,A),axis=0)
print(C)
"""
array([[1],
       [1],
       [1],
       [2],
       [2],
       [2],
       [2],
       [2],
       [2],
       [1],
       [1],
       [1]])
"""
# 矩阵合并-横向
D = np.concatenate((A,B,B,A),axis=1)
print(D)
"""
array([[1, 2, 2, 1],
       [1, 2, 2, 1],
       [1, 2, 2, 1]])
"""

Numpy array 分割

  • np.vsplit():对矩阵进行按行分割
  • np.hsplit():对矩阵进行按列分割
  • np.split():对矩阵进行按列分割,按照指定维度
  • np.array_split():对矩阵进行不等量分割

参考代码:

# 横向分割:从左到右分割(hsplit,axis=1)
# 纵向分割:从上到下分割(vsplit,axis=0)

import numpy as np
A = np.arange(12).reshape((3, 4))
print(A)
"""
array([[ 0,  1,  2,  3],
    [ 4,  5,  6,  7],
    [ 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.split(A, 3, axis=0))
# [array([[0, 1, 2, 3]]), array([[4, 5, 6, 7]]), array([[ 8,  9, 10, 11]])]

# 错误分割
print(np.split(A, 3, axis=1))
# ValueError: array split does not result in an equal division

# 不等量分割
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)) #等于 print(np.split(A, 3, axis=0))
# [array([[0, 1, 2, 3]]), array([[4, 5, 6, 7]]), array([[ 8,  9, 10, 11]])]

print(np.hsplit(A, 2)) #等于 print(np.split(A, 2, axis=1))
"""
[array([[0, 1],
       [4, 5],
       [8, 9]]), array([[ 2,  3],
        [ 6,  7],
        [10, 11]])]
"""

Numpy copy & deep copy

  • = 的赋值方式会带有关联性
  • copy() 的赋值方式没有关联性
    参考代码:
import numpy as np
a = np.arange(4)
# array([0, 1, 2, 3])
b = a

a[0] = 11
print(a)
# array([11,  1,  2,  3])

b is a  # True

b[1:3] = [22, 33]   # array([11, 22, 33,  3])
print(a)            # array([11, 22, 33,  3])
print(b)            # array([11, 22, 33,  3])

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])

再次感谢莫烦python

猜你喜欢

转载自blog.csdn.net/qq_22979337/article/details/85051670