一。形状在NumPy中的意义

你写,“我知道字面上它是一个数字列表和所有列表中只包含一个数字的列表”,但这是一个有点无益的思考方式。

考虑NumPy数组的最好方法是,它们由两部分组成,一个数据缓冲区只是一个原始元素块,另一个视图描述如何解释数据缓冲区。

例如,如果我们创建一个由12个整数组成的数组:>>> a = numpy.arange(12)

>>> a

array([ 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11])

然后a由一个数据缓冲区组成,其排列方式如下:┌────┬────┬────┬────┬────┬────┬────┬────┬────┬────┬────┬────┐

│ 0 │ 1 │ 2 │ 3 │ 4 │ 5 │ 6 │ 7 │ 8 │ 9 │ 10 │ 11 │

└────┴────┴────┴────┴────┴────┴────┴────┴────┴────┴────┴────┘

以及描述如何解释数据的视图:>>> a.flags

C_CONTIGUOUS : True

F_CONTIGUOUS : True

OWNDATA : True

WRITEABLE : True

ALIGNED : True

UPDATEIFCOPY : False

>>> a.dtype

dtype('int64')

>>> a.itemsize

8

>>> a.strides

(8,)

>>> a.shape

(12,)

这里的shape(12,)表示数组由一个从0到11的索引索引。从概念上讲,如果我们将这个索引标记为i,那么数组a如下所示:i= 0 1 2 3 4 5 6 7 8 9 10 11

┌────┬────┬────┬────┬────┬────┬────┬────┬────┬────┬────┬────┐

│ 0 │ 1 │ 2 │ 3 │ 4 │ 5 │ 6 │ 7 │ 8 │ 9 │ 10 │ 11 │

└────┴────┴────┴────┴────┴────┴────┴────┴────┴────┴────┴────┘

如果我们reshape一个数组,这不会改变数据缓冲区。相反,它创建了一个新视图,该视图描述了解释数据的不同方式。所以之后:>>> b = a.reshape((3, 4))

数组b与a具有相同的数据缓冲区,但现在它由分别从0到2和从0到3的两个索引索引。如果我们标记这两个索引i和j,那么数组b如下所示:i= 0 0 0 0 1 1 1 1 2 2 2 2

j= 0 1 2 3 0 1 2 3 0 1 2 3

┌────┬────┬────┬────┬────┬────┬────┬────┬────┬────┬────┬────┐

│ 0 │ 1 │ 2 │ 3 │ 4 │ 5 │ 6 │ 7 │ 8 │ 9 │ 10 │ 11 │

└────┴────┴────┴────┴────┴────┴────┴────┴────┴────┴────┴────┘

也就是说:>>> b[2,1]

9

您可以看到第二个索引变化很快,而第一个索引变化很慢。如果您希望这样做,可以指定order参数:>>> c = a.reshape((3, 4), order='F')

这会产生一个这样的索引数组:i= 0 1 2 0 1 2 0 1 2 0 1 2

j= 0 0 0 1 1 1 2 2 2 3 3 3

┌────┬────┬────┬────┬────┬────┬────┬────┬────┬────┬────┬────┐

│ 0 │ 1 │ 2 │ 3 │ 4 │ 5 │ 6 │ 7 │ 8 │ 9 │ 10 │ 11 │

└────┴────┴────┴────┴────┴────┴────┴────┴────┴────┴────┴────┘

也就是说:>>> c[2,1]

5

现在应该很清楚数组的一个或多个维度为1的形状意味着什么。之后:>>> d = a.reshape((12, 1))

数组d由两个索引索引,第一个索引从0到11,第二个索引始终为0:i= 0 1 2 3 4 5 6 7 8 9 10 11

j= 0 0 0 0 0 0 0 0 0 0 0 0

┌────┬────┬────┬────┬────┬────┬────┬────┬────┬────┬────┬────┐

│ 0 │ 1 │ 2 │ 3 │ 4 │ 5 │ 6 │ 7 │ 8 │ 9 │ 10 │ 11 │

└────┴────┴────┴────┴────┴────┴────┴────┴────┴────┴────┴────┘

所以:>>> d[10,0]

10

长度为1的维度是“自由的”(在某种意义上),所以没有什么能阻止你进城:>>> e = a.reshape((1, 2, 1, 6, 1))

给出如下索引的数组:i= 0 0 0 0 0 0 0 0 0 0 0 0

j= 0 0 0 0 0 0 1 1 1 1 1 1

k= 0 0 0 0 0 0 0 0 0 0 0 0

l= 0 1 2 3 4 5 0 1 2 3 4 5

m= 0 0 0 0 0 0 0 0 0 0 0 0

┌────┬────┬────┬────┬────┬────┬────┬────┬────┬────┬────┬────┐

│ 0 │ 1 │ 2 │ 3 │ 4 │ 5 │ 6 │ 7 │ 8 │ 9 │ 10 │ 11 │

└────┴────┴────┴────┴────┴────┴────┴────┴────┴────┴────┴────┘

所以:>>> e[0,1,0,0,0]

6

2。怎么办?

因为^{}只是创建了一个新视图,所以您不应该害怕在必要时使用它。当你想用不同的方法索引一个数组时,它是正确的工具。

然而,在长时间的计算中,通常可以首先安排构造具有“正确”形状的数组,从而最小化整形和转置的次数。但如果没有看到导致重塑需求的实际背景,就很难说应该改变什么。

你问题的例子是:numpy.dot(M[:,0], numpy.ones((1, R)))

但这并不现实。首先,这个表达式:M[:,0].sum()

更简单地计算结果。第二,第0列真的有什么特别之处吗?也许你真正需要的是:M.sum(axis=0)

python里的体格是啥r_numpy.数组形状(R,1)和(R,)之间的差异相关推荐

  1. python中3or5什么意思_示例详解Python3 or Python2 两者之间的差异

    每门编程语言在发布更新之后,主要版本之间都会发生很大的变化. 在本文中,Vinodh Kumar 通过示例解释了 Python 2 和 Python 3 之间的一些重大差异,以帮助说明语言的变化. 本 ...

  2. 一篇长文带你在python里玩转Json数据

    Json简介 Json(JavaScript Object Notation) 很多网站都会用到Json格式来进行数据的传输和交换. 这因为Json是一种轻量级的数据交换格式,具有数据格式简单,读写方 ...

  3. Python里的dict和set的背后小秘密

    Python里的dict和set的效率有多高? 为什么它们是无序的? 为什么并不是所有的Python对象都可以当作dict的键或set里的元素? 为什么dict的键和set的元素的顺序是根据它们被添加 ...

  4. python里面的dict和set

    python里面的dict和set dict Python内置了字典:dict的支持,dict全称dictionary,在其他语言中也称为map,使用键-值(key-value)存储,具有极快的查找速 ...

  5. python里面的list

    python里面的list list Python内置的一种数据类型是列表:list.list是一种有序的集合,可以随时添加和删除其中的元素. 比如,列出班里所有同学的名字,就可以用一个list表示: ...

  6. hutol json null值没了_一篇长文带你在python里玩转Json数据

    前言 文的文字及图片来源于网络,仅供学习.交流使用,不具有任何商业用途,版权归原作者所有,如有问题请及时联系我们以作处理. 作者: 朱小五/凹凸玩数据 PS:如有需要Python学习资料的小伙伴可以加 ...

  7. python里的collections模块

    python里的collections模块 collections模块里提供了一些特殊功能的容器: namedtuple deque ChainMap Counter OrderedDict defa ...

  8. C# json解析字符串总是多出双引号_一篇长文带你在python里玩转Json数据

    Json简介 Json(JavaScript Object Notation) 很多网站都会用到Json格式来进行数据的传输和交换,就像上篇我提到的网易云音乐接口,它们返回的数据都是Json格式的. ...

  9. Python中用pandas将numpy中的数组数据保存到csv文件

    Python中用pandas将numpy中的数组数据保存到csv文件 本博客转载自:[1]https://blog.csdn.net/grey_csdn/article/details/7018587 ...

最新文章

  1. 【SSRS】入门篇(二) -- 建立数据源
  2. 《Programming WPF》翻译 第8章 6.我们进行到哪里了?
  3. Django模型层(models.py)之多表操作
  4. MySql 插入数据中文乱码
  5. 【Pre蓝桥杯嵌入式】【STM32】Unkown device
  6. 斯坦福 CS183 Peter Thiel 创业课资料整理
  7. OPPO Reno6系列将推Bobbi Brown联名版
  8. Nginx源码阅读笔记-内存池的设计
  9. idea 热部署_Spring Boot Idea中热部署(自动刷新)
  10. 阿里云windows服务器设置虚拟内存
  11. MATLAB信号处理---学习小案例(2)---采样定理
  12. 一文快速了解MaxCompute
  13. LeetCode T32 Longest Valid Parentheses
  14. VC中.pch是什么文件,没有.pch文件怎么办
  15. 录音转成文字的方法分享
  16. 谁将烟焚散,散了纵横的牵绊
  17. 分布式基础-分布式事务
  18. linux版_百度输入法Linux版发布 | 欧侃在线“统一源”提供直接安装
  19. 嵌入式Linux C笔试题积累
  20. 转载:如何与老板谈加薪

热门文章

  1. 我与技术------2012程序之路
  2. 黄聪:DEDECMS联动调用时提示“你设定了字段为联动类型,但系统中没找到与你定义的字段名相同的联动组名!”...
  3. RTX51 tiny系统要注意的问题:(关于时间片)
  4. 这是一个不完整的详细Java多线程,但对于初学者足够了,相信我,你会爱上她的
  5. 产品经理刷题2020.09.20
  6. Spark配置参数优先级
  7. DAY7-Python学习笔记
  8. office文档、图片、音/视频格式转换工具
  9. [转]struts2处理.do后缀的请求
  10. 给大家推荐几本经典技术书籍