对numpy中shape的理解
from:http://blog.csdn.net/by_study/article/details/67633593
环境:Windows, Python3.5
一维情况:
>>>> import numpy as np
>>> a = np.array([2,3,33])
>>> a
array([ 2 3 33 ])
>>> print(a)
[ 2 3 33 ]
>>> a.shape
(3, )
>>> a.shape[0]
3
>>> a.shape[1]
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
IndexError: tuple index out of range
一维情况中array创建的可以看做list(或一维数组),创建时用()和[ ]都可以,多维也一样,两种方法创建后的输出显示结果也相同,这里使用[ ]进行创建
>>>> a = np.zeros([1])
b = np.ones([1])
>>> print(a)
[ 0. ]
>>> print(b)
[ 1. ]
二维情况:
>>> a = np.array([[2,3,33],[2,1,1]])
>>> a
array([[ 2, 3, 33],
[ 2, 1, 1]])
>>> a.shape[0]
2
>>> a.shape[1]
3
>>> a.shape[2]
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
IndexError: tuple index out of range
二维情况中array创建的可以看做二维数组(矩阵),注意创建时需要使用2个[ ],输出a的shape显示的(2,3)相当于有2行,每行3个数,使用np.ones创建结果如下:
>>> a = np.ones([2, 3])
>>> a
array([[ 1., 1., 1.],
[ 1., 1., 1.]])
多维情况:
>>> a = np.ones([1,1,1])
>>> a
array([[[ 1.]]])
>>> a = np.ones([1,1,2])
>>> a
array([[[ 1., 1.]]])
>>> a = np.ones([1,2,1])
>>> a
array([[[ 1.],
[ 1.]]])
>>> a = np.ones([2,1,1])
>>> a
array([[[ 1.]], [[ 1.]]])
从上面的代码可以看出,三维情况创建时后面2个参数可以看做是创建二维数组,第1个参数看做创建的二维数组的个数,所以创建时输入的参数为2,3,2时,就相当于创建了2个3行2列的二维数组,如下:
>>> a = np.ones([2,3,2])
>>> a
array([[[ 1., 1.],
[ 1., 1.],
[ 1., 1.]], [[ 1., 1.],
[ 1., 1.],
[ 1., 1.]]])
然后看四维情况:
>>> a = np.ones([1,1,1,1])
>>> a
array([[[[ 1.]]]])
>>> a = np.ones([1,1,1,2])
>>> a
array([[[[ 1., 1.]]]])
>>> np.ones([1,1,2,1])
array([[[[ 1.],
[ 1.]]]])
>>> np.ones([1,2,1,1])
array([[[[ 1.]], [[ 1.]]]])
>>> np.ones([2,1,1,1])
array([[[[ 1.]]], [[[ 1.]]]])
从上面代码可以看出:四维时将第一个参数设置为2和第二个参数设置为2时,输出结果中间的空行数量不同,我把它理解成先创建1行1列的二维数组[[ 1. ]],然后按照第2个参数打包这样的二维数组,如果第二个参数是2,则打包2个2维数组变成[[[ 1. ]],[[ 1. ]]](小包),然后按照第1个参数再打包这样的包,如果第一个参数是2,则变成[[[[ 1. ]], [[ 1. ]]], [[[ 1. ]], [[ 1. ]]]](大包),就是下面的结果:
>>> np.ones([2,2,1,1])
array([[[[ 1.]], [[ 1.]]], [[[ 1.]], [[ 1.]]]])
四维以上的结果也是这么理解~输出中区分参数用空行~
>>> m = np.ones([2,3,2,3])
>>> m
array([[[[ 1., 1., 1.],
[ 1., 1., 1.]], [[ 1., 1., 1.],
[ 1., 1., 1.]], [[ 1., 1., 1.],
[ 1., 1., 1.]]], [[[ 1., 1., 1.],
[ 1., 1., 1.]], [[ 1., 1., 1.],
[ 1., 1., 1.]], [[ 1., 1., 1.],
[ 1., 1., 1.]]]])
>>> m[1,:,:,:]
array([[[ 1., 1., 1.],
[ 1., 1., 1.]], [[ 1., 1., 1.],
[ 1., 1., 1.]], [[ 1., 1., 1.],
[ 1., 1., 1.]]])
>>> m[:,1,:,:]
array([[[ 1., 1., 1.],
[ 1., 1., 1.]], [[ 1., 1., 1.],
[ 1., 1., 1.]]])
>>> m[:,:,1,:]
array([[[ 1., 1., 1.],
[ 1., 1., 1.],
[ 1., 1., 1.]], [[ 1., 1., 1.],
[ 1., 1., 1.],
[ 1., 1., 1.]]])
>>> m[:,:,:,1]
array([[[ 1., 1.],
[ 1., 1.],
[ 1., 1.]], [[ 1., 1.],
[ 1., 1.],
[ 1., 1.]]])
]括起来,这种创建方式要给定数据;采用np.ones()或np.zeros()创建分别产生全1或全0的数据,用a.shape会输出你创建时的输入,创建时输入了几个维度输出就会用几个[
]括起来,shape的返回值是一个元组,里面每个数字表示每一维的长度
对numpy中shape的理解的更多相关文章
- numpy 中的 broadcasting 理解
broadcast 是 numpy 中 array 的一个重要操作. 首先,broadcast 只适用于加减. 然后,broadcast 执行的时候,如果两个 array 的 shape 不一样,会先 ...
- numpy中shape的部分解释
转载自:https://blog.csdn.net/qq_28618765/article/details/78081959和https://www.jianshu.com/p/e083512e4f4 ...
- Python:numpy中shape和reshape的用法
>>> w=np.zeros((5,6))>>> warray([[ 0., 0., 0., 0., 0., 0.], [ 0., 0., ...
- [开发技巧]·Numpy中对axis的理解与应用
[开发技巧]·Numpy中对axis的理解与应用 1.问题描述 在使用Numpy时我们经常要对Array进行操作,如果需要针对Array的某一个纬度进行操作时,就会用到axis参数. 一般的教程都是针 ...
- numpy中 array数组的shape属性
numpy.array 的shape属性理解 在码最邻近算法(K-Nearest Neighbor)的过程中,发现示例使用了numpy的array数组管理,其中关于array数组的shape(状态)属 ...
- 理解numpy中ndarray的内存布局和设计哲学
目录 ndarray是什么 ndarray的设计哲学 ndarray的内存布局 为什么可以这样设计 小结 参考 博客:博客园 | CSDN | blog 本文的主要目的在于理解numpy.ndarra ...
- 关于NumPy中数组轴的理解
参考原文链接(英文版):https://www.sharpsightlabs.com/blog/numpy-axes-explained/:中文版:https://www.jianshu.com/p/ ...
- python中numpy.ndarray.shape的用法
今天用到了shape,就顺便学习一下,这个shape的作用就是要把矩阵进行行列转换,请看下面的几个例子就明白了: >>> import numpy as np >>> ...
- Numpy中Meshgrid函数介绍及2种应用场景
近期在好几个地方都看到meshgrid的使用,虽然之前也注意到meshgrid的用法.但总觉得印象不深刻,不是太了解meshgrid的应用场景.所以,本文将进一步介绍Numpy中meshgrid的用法 ...
随机推荐
- Hdoj 1008.Elevator 题解
Problem Description The highest building in our city has only one elevator. A request list is made u ...
- 自学Linux Shell12.6-嵌套循环for命令
点击返回 自学Linux命令行与Shell脚本之路 12.6-嵌套循环for命令 嵌套循环就是在一个循环中还有一个循环. 内部循环在外部循环体中,在外部循环的每次执行过程中都会触发内部循环,直到内部循 ...
- 自学Zabbix5.1 zabbix maintenance维护周期
自学Zabbix5.1 zabbix maintenance维护周期 1. 概述 你可以定义维护周期在主机或主机组里.这里有2种维护状态: 依旧收集数据 继续对目标的监控数据的收集 暂停收集数据 ...
- cf500E New Year Domino (倍增)
先用线段树处理出推倒某一个后能覆盖到的最右端的位置R(绝对不能是最右边的那个骨牌,因为有可能右面的很短,左面的巨长(R不随L单调),后面算花费又需要用到这个位置),之后可以花费R到第一个比R大的左端点 ...
- bash执行命令分别输出正常日志和错误日志
0. 说明 执行bash命令的定时任务时候,希望能把正常的日志输出到一个文件里面,同时如果执行的过程发生异常则把异常日志输出到另一个不同的文件中.方便今后异常排查,极大有利于快速定位出错位置. 需要了 ...
- [NOI2009]二叉查找树
题目大意: 给定一棵严格的treap,父亲节点的优先级必然小于儿子节点的.权值按照二叉树的定义,左儿子小于父亲小于右儿子. 深度从1开始定义,每个点除优先级.数值之外,还有一个访问频度. 访问频度所产 ...
- Java逐行写入字符串到文件
下边是写东西到一个文件中的Java代码.运行后每一次,一个新的文件被创建,并且之前一个也将会被新的文件替代.这和给文件追加内容是不同的. 1. public static void writeFile ...
- MySQL基本命令行
登陆:mysql –h localhost –u 用户名 –p mysql –u 用户名 –p (默认连接localhost服务器) 服务器中可以有多个库,库中可以有多个表.数据库的名字无法修改 ...
- sklearn模块函数介绍
一.sklearn.metrics.accuracy_score 这个包可以帮助我们统计两个列表中相同位置元素相同的个数,比如我们预测出来的label和真实的label有多大差距,预测的准确率是多少, ...
- Golang面向过程编程-函数
Golang面向过程编程-函数 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.什么是函数 简单的说函数的作用就是把程序里多次调用的相同的代码部分定义成一份,然后起个名字,所有的 ...