python中矩阵切片维数微秒变化
1 前言
使用切片访问矩阵的部分数据(特别是一行或一列数据)时,通常会出现切片维数怎么在瞎变化,以致于不得不用reshape()强制改变维数。在深度学习中,网络对矩阵维数的要求是非常严格的,往往就是这些看似不起眼的错误,导致整个程序崩溃。
2 numpy中切片
import numpy as np
a=np.array([[1,2,3],[4,5,6],[7,8,9]])
b=a[0,0]
c=a[0:2,0]
d=a[0,0:2]
e=a[0:1,0:1]
print("a=",a)
print("b=",b)
print("c=",c)
print("d=",d)
print("e=",e)
运行结果:
变量空间:
可以看出,使用了冒号“:”就不会降维。比如:b没有使用“:”,变成0维,即数值;c,d只使用一个“:",变成1维,即向量;而e有2个地方使用“:”,仍为矩阵。
如果确实弄不清或担心出错,可以用reshape()进行强制转换,其中-1表示维数待定(=总元素个数/其他维度元素个数),如下:
c=c.reshape(-1,1)
d=d.reshape(1,-1)
print("c=",c)
print("d=",d)
运行结果:
变量空间:
3 list中切片
a=[[1,2,3],[4,5,6],[7,8,9]]
b=a[0][0]
c=a[0:2][0]
d=a[0][0:2]
e=a[0:1][0:1]
print("a=",a)
print("b=",b)
print("c=",c)
print("d=",d)
print("e=",e)
运行结果:
变量空间:
和numpy中一样,使用了“:”就不会降维。
4 注意事项
- list和numpy访问数据元素有所不同,list是一层一层的从外往里访问,每访问一层加一个“[ ]”,和C语言中的2维数组访问方式差不多,而numpy只用一个“[ ]”,层之间用“,”隔开。
- list中没有reshape()函数,不能改变列表维度,除非使用先转换为numpy数组,调用reshape()函数,再转换为list,如下:
f=np.array(e).reshape(-1,1).tolist()
print("f=",f) # f= [[1], [2], [3]]
变量空间:
- 如果不看变量空间,numpy数组可以通过a.shape属性和np.shape(a)函数查看数组维度,list只能通过len()函数查看列表第一维的维度,如下:
import numpy as np
a=np.array([[1,2,3],[4,5,6]])
b=[[1,2,3],[4,5,6]]
print("a.shape=",a.shape)
print("np.shape(a)=",np.shape(a))
print("len(a)=",len(a))
print("len(b)=",len(b))
print("len(b[0])=",len(b[0]))
运行结果:
声明:本文转自python中矩阵切片维数微秒变化
python中矩阵切片维数微秒变化的更多相关文章
- Python中的切片操作
python中的切片操作功能十分强大,通常我们利用切片来进行提取信息,进行相关的操作,下面就是一些切片的列子. 列如我们从range函数1-100中取7的倍数,函数及结果如下所示: >>& ...
- 关于python中矩阵的实现和矩阵的转置
python中矩阵的实现是靠序列,,, 序列有很多形式, 其实矩阵是现实生活中的东西,把现实生活中的结构转换到程序中. 就需要有个实现的方法,而这种路径是多种多样的. 下面给出一个把矩阵转换成pyth ...
- 一些Python中的二维数组的操作方法
一些Python中的二维数组的操作方法 这篇文章主要介绍了一些Python中的二维数组的操作方法,是Python学习当中的基础知识,需要的朋友可以参考下 需要在程序中使用二维数组,网上找到一种这样的用 ...
- 在python中定义二维数组
发表于 http://liamchzh.0fees.net/?p=234&i=1 一次偶然的机会,发现python中list非常有意思. 先看一段代码 [py]array = [0, 0, 0 ...
- python中的切片
python中提供了一种很方便的方法来完成取出指定范围内的元素,这种方法就是切片(Slice). 以下为切片的例子: In [1]: L = ['Michael', 'Sarah', 'Tracy', ...
- Python 中的多维字典
Python中的dict可以实现迅速查找.那么有没有像数组有二维数组一样,有二维的字典呢?比如我需要对两个关键词进行查找的时候.2D dict 可以通过 dict_2d = {'a': {'a': 1 ...
- 在Python中建立N维数组并赋初值
在Python中,由于不像C++/Java这样的语言可以方便的用a[i][j]=0的方式,建立二维数组并赋初值,所以需要一个相对巧妙的方法. 可以用列表解析的方式,eg: >>> m ...
- Python中的切片符
最近在学python,感觉切片符有点难以理解.在网上查了点资料,然后做个总结 理解切片符,首先得知道数组是从0开始的, 而且切片符最后一个是-1. 我们先定义个数组 a=[1,2,3,4,5] 切 ...
- python中矩阵的用法
python矩阵的表示真是让人头大,下面记录一下具体用法:array是numpy库里的.不管怎样, 一.首先导入 numpy: 1)import numpy 2)from numpy import * ...
- python中数组切片[:,i] [i:j:k] [:-i] [i,j,:k]
逗号","分隔各个维度,":"表示各个维度内的切片,只有:表示取这个维度的全部值,举例说明如下 1 1.二维数组 2 3 X[:,0]取所有行的第0个数据,第二 ...
随机推荐
- RSA趣题篇(简单型)
1.n与p的关系 题目 ('n=', 288990088827100766680640490138486855101396196362885475612662192799072729620922966 ...
- [js] - 为子节点增加鼠标移入和移出的样式
var cards = document.querySelectorAll(".card"); for (let index = 0; index < cards.lengt ...
- Go-数据类型-数字
Go数字类型 整数 int 类 int(在32机器上为int32,在64位机器上为int64) int8 int16 int32 int64 unit类 uint(在32机器上为uint32,在64位 ...
- [转帖]Docker与k8s的恩怨情仇(四):云原生时代的闭源落幕
https://zhuanlan.zhihu.com/p/388840887 在本系列前几篇文章中,我们介绍了从Cloud Foundry到Docker等PaaS平台的发展迭代过程.今天我们继续来为大 ...
- [转帖]Linux中查找大文件两种姿势
https://rumenz.com/rumenbiji/linux-find-du-max-file.html 使用find命令查找大文件 find命令是Linux系统管理员工具库中最强大的工具之一 ...
- [转帖]深入理解mysql-第五章 InnoDB记录存储结构-页结构
前言: 页是InnoDB管理存储空间的基本单位,上一章我们主要分析了页中的主要的构成行的存储结构-行格式,其中简单提了一下页的概念.这章我们详细讲解一下页的存储结构. 一.数据页结构 前边我们简单提了 ...
- [转帖]Elasticsearch部署配置建议
1: 选择合理的硬件配置:尽可能使用 SSD Elasticsearch 最大的瓶颈往往是磁盘读写性能,尤其是随机读取性能.使用SSD(PCI-E接口SSD卡/SATA接口SSD盘)通常比机械硬盘(S ...
- [转帖]shell脚本中$0 $1 $# $@ $* $? $ 的各种符号的意义
概述 shell中有两类字符,一类是普通字符,在Shell中除了本身的字面意思外没有其他特殊意义,即普通纯文本:另一类即元字符,是Shell的保留字符,在Shell中有着特殊的含义. 今天主要介绍一下 ...
- rabbitmq rpm包安装以及简单设置用户的方法
公司有一台性能比较好的power机器. 同事要求安装rabbitmq 今天尝试进行了一下处理 公司里面有网络有相应的源 性能还不错 第一步安装一下依赖的erlang yum install erlan ...
- Docker容器基础入门认知-Cgroup
在上一篇说完 namespace 给容器技术提供了隔离之后,我们在介绍一下容器的"限制"问题 也许你会好奇,我们不是已经通过 Linux Namespace 给容器创建了一个容器了 ...