numpy学习笔记

numpy学习笔记


目录

numpy学习笔记

numpy的安装

numpy 的属性:

Numpy 创建 array

Numpy 基础运算

Numpy 索引

Numpy array 合并

Numpy array 分割

Numpy copy & deep copy


numpy的安装

pip install numpy

numpy 的属性:

  • ndim:维度

  • shape:行数和列数

  • size:元素个数

import numpy as np #为了方便使用numpy 采用np简写
array = np.array([[1,2,3],[2,3,4]])  #列表转化为矩阵
​
print('number of dim:',array.ndim)  # 维度
# number of dim: 2
print('shape :',array.shape)    # 行数和列数
# shape : (2, 3)
print('size:',array.size)   # 元素个数
# size: 6

Numpy 创建 array

  • array:创建数组

  • dtype:指定数据类型

  • zeros:创建数据全为0

  • ones:创建数据全为1

  • empty:创建数据接近0

  • arrange:按指定范围创建数据

  • linspace:创建线段

a = np.array([2,23,4])  # list 1d
#指定数据 dtype
a = np.array([2,23,4],dtype=np.int)
a = np.array([2,23,4],dtype=np.int32)
a = np.array([2,23,4],dtype=np.float)
a = np.array([2,23,4],dtype=np.float32)
#创建特定数据 
a = np.array([[2,23,4],[2,32,4]])  # 2d 矩阵 2行3列
#创建全零数组
a = np.zeros((3,4)) # 数据全为0,3行4列
#创建全一数组, 同时指定这些特定数据的 dtype:
a = np.ones((3,4),dtype = np.int)   # 数据为1,3行4列
#创建全空数组:
a = np.empty((3,4)) # 数据为empty,3行4列
#用 arange 创建连续数组:
a = np.arange(10,20,2) # 10-19 的数据,2步长
#使用 reshape 改变数据的形状
a = np.arange(12).reshape((3,4))    # 3行4列,0到11
#用 linspace 创建线段型数据:
a = np.linspace(1,10,20)    # 开始端1,结束端10,且分割成20个数据,生成线段
#同样也能进行 reshape 工作:
a = np.linspace(1,10,20).reshape((5,4)) # 更改shape
​

Numpy 基础运算

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])
​
#在Numpy中,想要求出矩阵中各个元素的乘方需要依赖双星符号 **,即:
c=b**2  # array([0, 1, 4, 9])
​
#当需要对矩阵中每一项元素进行函数运算时:
c=10*np.sin(a)  # array([-5.44021111,  9.12945251, -9.88031624,  7.4511316 ])
​
#对print函数进行一些修改可以进行逻辑判断:
print(b<3)  # array([ True,  True,  True, False], dtype=bool)
​
########################多维矩阵#######################
a=np.array([[1,1],[0,1]])
b=np.arange(4).reshape((2,2))
​
#对应元素相乘
c=a*b
#标准矩阵相乘
c_dot = np.dot(a,b)
c_dot_2 = a.dot(b)
​
#对矩阵中所有元素进行求和,寻找最小值,寻找最大值的操作:
np.sum(a)   
np.min(a)  
np.max(a)   
#需要对行或者列进行查找运算,要在上述代码中为 axis 进行赋值。 当axis的值为0的时候,将会以列作为查找单元, 当axis的值为1的时候,将会以行作为查找单元。
print("sum =",np.sum(a,axis=1))
print("min =",np.min(a,axis=0))
print("max =",np.max(a,axis=1))
import numpy as np
A = np.arange(2,14).reshape((3,4)) 
    
# argmin() 和 argmax() 两个函数分别对应着求矩阵中最小元素和最大元素的索引。
print(np.argmin(A))    # 0
print(np.argmax(A))    # 11
​
#计算统计中的均值
print(np.mean(A))        # 7.5 mean()函数还有另外一种写法: print(A.mean())
print(np.average(A))     # 7.5
​
#求解中位数的函数:
print(A.median())       # 7.5
​
#累加函数
print(np.cumsum(A)) 
​
#累差函数
print(np.diff(A))   
​
#对所有元素进行仿照列表一样的排序操作
print(np.sort(A))    
​
#矩阵的转置两种表示方法:
print(np.transpose(A))    
print(A.T)
​

Numpy 索引

一维索引

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 row in A:
    print(row)
"""    
[ 3,  4,  5, 6]
[ 7,  8,  9, 10]
[11, 12, 13, 14]
"""
​
for column in A.T:
    print(column)
"""  
[ 3,  7,  11]
[ 4,  8,  12]
[ 5,  9,  13]
[ 6, 10,  14]
"""
​
#flatten是一个展开性质的函数,将多维的矩阵进行展开成1行的数列
print(A.flatten())   # array([3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14])

Numpy array 合并

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
# [1,1,1,2,2,2]

Numpy array 分割

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

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

 

原文地址:https://www.cnblogs.com/Archger/p/12774670.html