《python深度学习:基于tensorflow》学习笔记(一)——Numpy常用操作

第一部分 python及应用数学基础

numpy常用操作

  • 两种基本对象:
    • ndarray(N-dimensional array object) 存储单一数据类型的多维数组
    • ufunc(universal function object) 对数组今次那个处理的函数
      -使用numpy时导入:
import numpy as np

创建ndarray

  • 从已有数据中创建
    • 将列表转换为ndarray
import numpy as np 
list1 = [3.14,2.17,0,1,2]
nd1 = np.array(list1)
print(nd1)
print(type(nd1))

输出:
在这里插入图片描述
嵌套列表可以转化为多维ndarray

import numpy as np
list2 = [[3.14,2.17,0,1,2],[1,2,3,4,5]]
nd2 = np.array(list2)
print(nd2)
print(type(nd1))

在这里插入图片描述

  • 利用random模块生成ndarray
    • random 生成0到1之间的随机数
    • uniform 生成均匀分布随机数
    • randn 生成标准正态的随机数
    • normal 生成正态分布
    • shuffle 随机打乱顺序
    • seed 设置随机数种子

seed( ) 用于指定随机数生成时所用算法开 始的整数值,如果使用相同的seed( )值,则每次生成的随即数都相同,如果不设置这个值,则系统根据时间来自己选择这个值,此时每次生成的随机数因时间差异而不同。

《python深度学习:基于tensorflow》学习笔记(一)——Numpy常用操作_第1张图片有无seed()区别:有seed()时,无论重复多少次IN[17]程序,得到的结果都相同;无seed()时,每次的结果都变化

生成一个随机种子,对生成的随机数打乱:

import numpy as np
np.random.seed(123)
nd5_1 =  np.random.randn(2,3)
print(nd5_1)
np.random.shuffle(nd5_1)
print('随机打乱后数据')
print(nd5_1)
print(type(nd5_1))

《python深度学习:基于tensorflow》学习笔记(一)——Numpy常用操作_第2张图片

  • 创建特定形状的多维数组
    例如0或1的数组或矩阵
    • np.zeros() 全是0的矩阵
    • np.ones() 全是1的矩阵
    • np.diag() 对角矩阵
    • np.eye() 单位矩阵
import numpy as np
nd6 = np.zeros([3,3])  #生成全是0的3x3矩阵
nd7 = np.ones([3,3])   #生成全是1的3x3矩阵
nd8 = np.eye(3)      #生成3阶的单位矩阵
nd9 = np.diag([1,2,3])  #生成3阶对角矩阵

将生成的数据保存到磁盘,再从磁盘读取

import numpy as np
nd10 = np.random.random([5,5])
np.savetext(X=nd10,fname='./test2.txt')
nd11 = np.loadtxt('./test2.txt')
  • 利用arange函数
  arrange(start, stop[, step],dtype=None)
     根据start与stop指定的范围,以及step设定的步长,生成一个ndarray,start默认为0
import numpy as np
print(np.arange(10))
print(np.arange(0,10))
print(np.arange(1,4,0.5))
print(np.arange(9,-1,-1))

在这里插入图片描述

存取元素

读取数据
import numpy as np
np.random.seed(2018)
nd12 = np.random.random([10])
#获取指定位置的数据,获取第四个元素
nd12_1 = nd12[3]
#截取一段数据
nd12_2 = nd12[3:6]
#截取固定间隔数据
nd12_3 = nd12[1:6:2]
#倒序取数
nd12_4 = nd12[::-2]
#截取一个多维数组的一个区域内数据
nd13 = np.arange(25).reshape([5,5])
nd13_1 = nd13[1:3,1:3]
#截取一个多维数组中,数值在一个值域内的数据
nd13_2 = nd13[(nd13>3)&(nd13<10)]
#截取多维数组中,指定的行,如读取第2,3行
nd13_3 = nd13[[1,2]] #或nd13[1:3,:]
#截取多维数组中,指定的列,如读取第2,3列

《python深度学习:基于tensorflow》学习笔记(一)——Numpy常用操作_第3张图片
通过random.choice函数从指定的样本中进行随机抽取数据

import numpy as np
from numpy import random as nr
a = np.arange(1,25,dtype = float)
c1 = nr.choice(a,size=(3,4))  #size指定输出数组形状
c2 = nr.choice(a,size=(3,4),replace=False) #replace缺省值为True,即可重复抽取
#下式中参数p指定每个元素对应的抽取概率,默认每个元素被抽取的概率相同
c3 = nr.choice(a,size=(3,4),p=a/np.sum(a))
print('随机可重复抽取')
print(c1)
print('随机但不重复抽取')
print(c2)
print('随机但按制度概率抽取')
print(c3)

《python深度学习:基于tensorflow》学习笔记(一)——Numpy常用操作_第4张图片

矩阵操作
import numpy as np
nd14 = np.arange(9).reshape([3,3])
#矩阵转置
nd14_t = np.transpose(nd14)
#矩阵乘法运算
a = np.arange(12).reshape([3,4])
b = np.arange(8).reshape([4,2])
a_b = a.dot(b)   ##如果处理的是一维数组,则得到的是两数组的内积,a·b=a1b1+a2b2+……+anbn
#就矩阵的迹
a_j = a.trace()
#计算矩阵行列式
a_linalg = np.linalg.det(nd14)
#计算逆矩阵
c = np.random.random([3,3])
c_nijuzhen = np.linalg.solve(c,np.eye(3))

《python深度学习:基于tensorflow》学习笔记(一)——Numpy常用操作_第5张图片《python深度学习:基于tensorflow》学习笔记(一)——Numpy常用操作_第6张图片

矩阵的合并与展开
  • 合并一维数组
import numpy as np
a = np.array([1,2,3])
b = np.array([4,5,6])
c = np.append(a,b)  #输出[1,2,3,4,5,6]
print(c)
d = np.concatenate([a,b])   #输出[1,2,3,4,5,6]
print(d)

输出:

[1 2 3 4 5 6]
[1 2 3 4 5 6]
  • 多维数组的合并
import numpy as np
a = np.arange(4).reshape(2,2)
b = np.arange(4).reshape(2,2)
#按行合并
c = np.append(a,b,axis=0)
print(c)
print('合并后的数据维度',c.shape)
#按列排列
d = np.append(a,b,axis=1)
print(d)
print('合并后数据维度',d.shape)

输出:

import numpy as np
a = np.arange(4).reshape(2,2)
b = np.arange(4).reshape(2,2)
#按行合并
c = np.append(a,b,axis=0)
print(c)
print('合并后的数据维度',c.shape)
#按列排列
d = np.append(a,b,axis=1)
print(d)
print('合并后数据维度',d.shape)

输出:

[[0 1]
 [2 3]
 [0 1]
 [2 3]]
合并后的数据维度 (4, 2)
[[0 1 0 1]
 [2 3 2 3]]
合并后数据维度 (2, 4)

-矩阵展平

import numpy as np
nd15 = np.arange(6).reshape(2,-1)  #缺省值-1代表我不知道要给行(或者列)设置为几,reshape函数会根据原矩阵的形状自动调整
print(nd15)
#按照列优先,展平
print('按列优先,展平')
print(nd15.ravel('F'))
#按照行优先,展开
print('按行优先,展开')
print(nd15.ravel())

输出:

[[0 1 2]
 [3 4 5]]
按列优先,展平
[0 3 1 4 2 5]
按行优先,展开
[0 1 2 3 4 5]

.shape()用法

https://blog.csdn.net/zhanggonglalala/article/details/79356653

numpy.linalg中常用函数《python深度学习:基于tensorflow》学习笔记(一)——Numpy常用操作_第7张图片

通用函数ufunc

numpy中常用通用函数:
《python深度学习:基于tensorflow》学习笔记(一)——Numpy常用操作_第8张图片深度学习算法中,一般使用向量化矩阵运算。

广播机制Broadcasting

功能:为了方便不同shape的数组进行数学运算
广播的兼容性原则为:

  • 对齐尾部维度
  • shape相等or其中shape元素中有一个为1
import numpy as np
a = np.arange(10)
b = np.arange(10)
#两个shape相同的数组相加
print('a+b=',a+b)
#一个数组与标量相加
print('a+3=',a+3)
#两个向量相乘
print('a*b=',a*b)
#多维数组之间的运算
c = np.arange(10).reshape([5,2])
d = np.arange(2).reshape([1,2])
#首先将数组进行复制扩充为[5,2],如何复制请参考下图,然后相加
print('c+d=')
print(c+d)

输出:







a+b= [ 0  2  4  6  8 10 12 14 16 18]
a+3= [ 3  4  5  6  7  8  9 10 11 12]
a*b= [ 0  1  4  9 16 25 36 49 64 81]
c+d=
[[ 0  2]
 [ 2  4]
 [ 4  6]
 [ 6  8]
 [ 8 10]]

《python深度学习:基于tensorflow》学习笔记(一)——Numpy常用操作_第9张图片

《python深度学习 基于TensorFlow》吴茂贵 第一章 NumPy常用操作 笔记

你可能感兴趣的:(《python深度学习:基于tensorflow》学习笔记(一)——Numpy常用操作)