对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的用法 ...
随机推荐
- Codeforces Round #411 div 2 D. Minimum number of steps
D. Minimum number of steps time limit per test 1 second memory limit per test 256 megabytes input st ...
- Java 8 的 Metaspace
Java 8 的 Metaspace https://www.cnblogs.com/xrq730/p/8688203.html 被废弃的持久代 想起之前面试的时候有面试官问起过我一个问题:Java ...
- 算法学习——决策单调性优化DP
update in 2019.1.21 优化了一下文中年代久远的代码 的格式…… 什么是决策单调性? 在满足决策单调性的情况下,通常决策点会形如1111112222224444445555588888 ...
- 【BZOJ5019】[SNOI2017]遗失的答案(FWT,动态规划)
[BZOJ5019][SNOI2017]遗失的答案(FWT,动态规划) 题面 BZOJ 题解 发现\(10^8\)最多分解为不超过\(8\)个本质不同质数的乘积. 而\(gcd\)和\(lcm\)分别 ...
- 【AGC016E】Poor Turkeys
Description 有\(n\)(\(1 \le n \le 400\))只鸡,接下来按顺序进行\(m\)(\(1 \le m \le 10^5\))次操作.每次操作涉及两只鸡,如果都存在则随意拿 ...
- sklearn 的train_test_split
train_test_split函数用于将矩阵随机划分为训练子集和测试子集,并返回划分好的训练集测试集样本和训练集测试集标签. 格式: from sklearn.model_selection imp ...
- 2018 省选 D1T2 IIIDX
题目大意: 给出k.n个数选择一种字典序最大的排列,使得对于任意的i,di>=d[i/k](下取整 下同) 分析: 很容易想到的是建树,将i的父亲设为[i/k],之后建有向边. 60分贪心: 将 ...
- Apache的ProxyPass简单使用
转: Apache的ProxyPass简单使用 置顶 2017年08月14日 18:54:33 师太,老衲把持不住了 阅读数:11164 http://mtnt2008.iteye.com/blo ...
- SQL SERVER与C#数据类型对照表
分类 SQL SERVER类型 类型说明 C#类型 精确数字 bigint 从 -2^63 (-9223372036854775808) 到 2^63-1 (9223372036854775807) ...
- java集合复制和反转
1.for循环方法: 2.System.arraycopy()方法: 3.Arrays.copyOf()方法: 4.Object.clone()方法: + View code /** * @autho ...