CS231n-Numpy入门
import numpy as npa = np.array([1, 2, 3]) #创建一个1x3的数组
print(type(a)) #结果应该是:<type 'numpy.ndarray'>
print(a.shape) #(3,)
print(a[0], a[1], a[2]) #1,2,3
a[0]=5
print(a) #[1,2,3]#####################其他一些创建并初始化数组的方法######################
a = np.zeros((2,2)
print(a) #输出结果为:[[0.,0.],# [0.,0.]]b = np.ones((1,2))
print(b) #输出结果为:[[1.,1.],# [1.,1.]]c = np.full((2,2), 7)
print(c) #输出结果为:[[7.,7.],# [7.,7.]]d = np.eye(2)
print(d) #输出结果为:[[1.,0.],# [0.,1.]]e = np.random.random((2,2))
print(e) #一输出结果:[[ 0.24675928,0.08179221]# [ 0.86916875,0.67120492]]#####################下标操作的一些常用的方法############################
a = np.array([[1,2,3,4], [5,6,7,8], [9,10,11,12]]) #创建数组:## [[ 1 2 3 4]# [ 5 6 7 8]# [ 9 10 11 12]]#取a的子数组,前2行的1,2列(从0开始)
b = a[:2, 1:3] #结果为:#[[2,3]# [3,7]]#子数组是原数组中的一部分,改变子数组值会相应更改原数组的值
b[0,0]=0.
print(a) #输出为:# [[ 1 0 3 4]# [ 5 6 7 8]# [ 9 10 11 12]]#取整行的操作,注意区别
row_r1 = a[1, :]
row_r2 = a[1:2, :]
print(row_r1, row_r1.shape) #[5,6,7,8] (4,)
print(row_r2, row_r2.shape) #[[5,6,7,8]] (1,4)#整数索引
a=np.array([[1,2],[3,4],[5,6]])
print(a[[0,1,2],[0,1,0]]) #[1,4,5]前面是行后面是列
同
print(np.array[a[0,0],a[1,1],a[2,0]]) #[1,4,5]print(a[[0,0],[1,1]]) #[2,2]
同
print(np.array[a[0,1],a[0,1]]) #[2,2]#整数索引使用,选择修改矩阵中某些行中的某些值
a=np.array([[1,2,3],[4,5,6],[7,8,9],[10,11,12]])
print(a) #[[1,2,3],# [4,5,6],# [7,8,9],# [10,11,12]]
b = np.array([0, 2, 0, 1]) #创建一个下标数组
print(a[np.arrange(4),b]) #使用b中元素做下标取a中每行对应的元素#[1,6,7,11]
a[np.arrange(4),b]+10 #改变对应的值
print(a) #[[11,2,3],# [4,5,16],# [17,8,9],# [10,21,12]]#布尔索引,从数组中取出一些满足一定条件的元素a = np.array([[1,2], [3, 4], [5, 6]]) #[[1,2],[3,4],[5,6]]bool_idx=(a>2) #找出a中大于2的元素,#返回值为形如a的矩阵,值为False或True
print(bool_idx) #[[False,False],[True,True],[True,True]]#使用布尔数组做下标输出a中的值
print(a[bool_idx]) #[3,4,5,6]###########################Numpy数组中的数据类型##############################
#缺省情况下,numpy 自动选择
x = np.array([1, 2])
print(x.dtype) #int64x = np.array([1.0, 2.0])
print(x.dtype)]) #float64#强制类型转换
x = np.array([1, 2], dtype=np.float64)
print(x.dtype) #float64#################################数组数学运算####################################按元素操作的基本数学运算,可以使用运算符,也可以使用相关函数
x = np.array([[1,2],[3,4]], dtype=np.float64)
y = np.array([[5,6],[7,8]], dtype=np.float64)#加法
print(x + y)
print(np.add(x, y)) #[[6.0,8.0],[10.0,12.0]]#减法
print(x - y)
print(np.subtract(x, y)) #[[-4.0,-4.0],[-4.0,-4.0]]#按位除
print(x / y)
print(np.divide(x, y)) #[[0.2,0.33333333],[0.42851743,0.5]]#按位乘
print(x * y)
print(np.multiply(x, y)) #[[5.0,12.0],[21.0,32.0]]#按位取平方根
print(np.sqrt(x)) #[[1.,1.41421356],[]1.73205081,2.]###矩阵运算
x = np.array([[1,2],[3,4]])
y = np.array([[5,6],[7,8]])v = np.array([9,10])
w = np.array([11, 12])#向量内积
print(v.dot(w))
print(np.dot(v, w)) #219#矩阵向量相乘
print(x.dot(v))
print(np.dot(x, v)) #[29,67]#矩阵相乘
print(x.dot(y))
print(np.dot(x, y)) #[[19,22],[43,50]]###数组中最有用的函数之一sum
x = np.array([[1,2],[3,4]])print(np.sum(x)) #10,计算数组x中所有元素的和
print(np.sum(x, axis=0)) #[4 6],按列求和
print(np.sum(x, axis=1)) #[3 7],按行求和###数组reshape或元素操作
#转置
x = np.array([[1,2], [3,4]])
print(x) #[[1,2],[3,4]]
print(x.T) #[[1,3],[2,4]]#对向量转置不起作用
v = np.array([1,2,3])
print(v) #[1,2,3]
print(v.T) #[1,2,3]########################## Broadcasting #####################################
#Broadcast是numpy中不同shape的数组进行数学运算的有效机制
#例:假如对一个矩阵的每一行同一个向量相加
#1.常规做法
x = np.array([[1,2,3], [4,5,6], [7,8,9], [10, 11, 12]])
v = np.array([1, 0, 1])
y = np.empty_like(x) #创建一个形如x的空数组for i in range(4):y[i, :] = x[i, :] + vprint(y) #[[2,2,4],# [5,5,7],# [8,8,10],# [11,11,13]]#but,若x很大,显示的循环在py中很费时#2.使用v生成一个与x shape相同的矩阵
x = np.array([[1,2,3], [4,5,6], [7,8,9], [10, 11, 12]])
v = np.array([1, 0, 1])
vv = np.tile(v, (4, 1)) #在每层上堆积v,(4,3)y = x + vv
print(y) #[[2,2,4],# [5,5,7],# [8,8,10],# [11,11,13]]
#3使用broadcast
x = np.array([[1,2,3], [4,5,6], [7,8,9], [10, 11, 12]])
v = np.array([1, 0, 1])
y = x + v #不同shape的数组相加
print(y) #[[2,2,4],# [5,5,7],# [8,8,10],# [11,11,13]]
numpy.flatnonzero(a)
返回将a
flatten之后的一维数组中非零元素的下标(indices)
>>>a=np.array([[1,2],[0,-1]])
>>>b=np.flatnonzero(a)
>>>b
array([0,1,3])
numpy.vstack(a,b)
,沿垂直方向合并数组(行方向),a,b除第一维外,其他维数要相同
>>> a = np.array([1, 2, 3])
>>> b = np.array([2, 3, 4])
>>> np.vstack((a,b))
array([[1, 2, 3],[2, 3, 4]])
>>> a = np.array([[1], [2], [3]])
>>> b = np.array([[2], [3], [4]])
>>> np.vstack((a,b))
# a.shape为3x1
array([[1],[2],[3],[2],[3],[4]])
numpy.stack(arr,axis=1)
,沿当前轴方向合并数组
>>> arrays = [np.random.randn(1, 2) for _ in range(3)]
>>> arrays[array([[0.66415129, 1.17639802]]),array([[-0.20116847, -0.07704193]]),array([[0.82340426, 0.56482453]])]>>> np.stack(arrays,axis=-1)array([[[ 0.66415129, -0.20116847, 0.82340426],[ 1.17639802, -0.07704193, 0.56482453]]])In [16]: np.stack(arrays,axis=0)
Out[16]:
array([[[ 0.66415129, 1.17639802]],[[-0.20116847, -0.07704193]],[[ 0.82340426, 0.56482453]]])
- reference
[1]https://docs.scipy.org/doc/numpy/user/basics.creation.html#arrays-creation
[2]https://docs.scipy.org/doc/numpy/reference/arrays.indexing.html
[3]https://docs.scipy.org/doc/numpy/reference/arrays.dtypes.html
[4]https://docs.scipy.org/doc/numpy/reference/routines.math.html
[5]https://docs.scipy.org/doc/numpy/reference/ufuncs.html#available-ufuncs
[6]http://scipy.github.io/old-wiki/pages/EricsBroadcastingDoc
[7]http://cs231n.github.io/python-numpy-tutorial/#numpy-datatypes
CS231n-Numpy入门相关推荐
- numpy 数组抽取_清晰易懂的Numpy入门教程
原标题:清晰易懂的Numpy入门教程 翻译 | 石头 来源 | Machine Learning Plus Numpy是python语言中最基础和最强大的科学计算和数据处理的工具包,如数据分析工具pa ...
- python numpy教程_Python中的Numpy入门教程
这篇文章主要介绍了 Python 中的 Numpy 入门教程,着重讲解了矩阵中的数组操作 , 需要的 朋友可以参考下 1 . Numpy 是什么 很简单, Numpy 是 Python 的一个科学计算 ...
- Numpy入门[9]——数组与字符串的转换
Numpy入门[9]--数组与字符串的转换 参考: https://ailearning.apachecn.org/ 使用Jupyter进行练习 import numpy as np tobytes方 ...
- numpy入门详细代码
numpy入门 生成小的随机数组 属性 生成ndarray 维度 类型转换 数组算术 基础索引和切片 copy使用 数组切片索引 数组转置 面向数组编程 条件逻辑转为数组操作 随机漫步示例 numpy ...
- [入门教程](python numpy入门)
[入门教程](python numpy入门) NumPy NumPy是一个开源的Python科学计算基础库,包含 •一个强大的N维数组对象ndarray •广播功能函数 •整合C/C++/Fortra ...
- 【Python语言基础】——Python NumPy 入门
Python语言基础--Python NumPy 入门 文章目录 Python语言基础--Python NumPy 入门 一.Python NumPy 入门 一.Python NumPy 入门 安装 ...
- Numpy入门(九):np.corrcoef()用法
点击跳转 <Numpy入门系列目录> numpy.corrcoef(x, y=无, rowvar = True, 偏差=<无值>, ddof=<无值>) x: ar ...
- python科学计算2 数据组织形式与numpy入门
文章目录 1 数据组织 1.1 单个数据 1.2 数据组织 1.3 数据组织的形式 1.3.1一维数据 1.3.2 二维数据 1.3.3 多维数据 1.3.4 高维数据 1.4普通数据组织的缺点 2 ...
- Numpy入门[16]——choose函数实现条件筛选
Numpy入门[16]--choose函数实现条件筛选 参考: https://ailearning.apachecn.org/ numpy高级函数操作之--select.choose 使用Jupyt ...
- numpy入门详细教程(一)
本讲主要介绍对numpy库和numpy库的N维数组对象:ndarray的基本了解.更多内容请看numpy入门详细教程(二) numpy: NumPy是一个开源的Python科学计算基础库,包含: • ...
最新文章
- 深入学习Lock锁(2)——LockSupport工具类
- 在C#中使用SqlDbType.Xml类型参数
- 组播路由协议基础——组播分发树
- bundle 的生成和使用
- tps 数据库写并发衡量_MPP数据库简介
- C++最简单的方式实现split分割函数
- iptables复习记忆
- Visaul Studio 常用快捷键的动画演示
- 素数环-dfs回溯+二维数组记录(c++实现)
- 牛客题霸 [ 	缺失数字] C++题解/答案
- 如何将SQL GROUP BY和聚合转换为Java 8
- android sqlite存储数据,Android之SQLite数据存储
- 布隆过滤器速度_高并发系统一定要考虑的 Bloom Filter 布隆过滤器
- Asp.net(C#)利用File Field多文件上传
- 无限极分类php简单,创建无限极分类树型结构的简单方法
- Python:Django 项目中可用的各种装备和辅助
- 使用poi导出excel,及合并单元格边框显示问题
- 计算机图形学-油画家算法
- oracle sys.dbms job,DBMS_JOB,dbms_ijob用法
- Comparable和Comparator接口
热门文章
- bzoj 2435: [Noi2011]道路修建(DFS)
- bzoj 1706: [usaco2007 Nov]relays 奶牛接力跑(倍增floyd)
- 安卓应用间的数据共享:ContentProvider、ContentResolver全解
- 支持kubernetes原生Spark 与其他应用的结合(mysql,postgresql,oracle,hdfs,hbase)
- python机器学习库sklearn——支持向量机svm
- python深度学习库tensorflow——实现FC卷积神经网络识别mnist手写体
- 2021.01.04
- R语言中%in%的作用
- 记录‘launch_simulation‘failed due to earlier errors的一个解决方法
- 不显示负频率的部分,坐标轴转换为频率,幅值量纲还原改善频谱图以及功率谱和对数功率谱