首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >Python和数字/数字数组切片行为

Python和数字/数字数组切片行为
EN

Stack Overflow用户
提问于 2016-02-27 00:06:11
回答 2查看 242关注 0票数 0

在Python2.4上,单冒号片操作符:Numeric矩阵上按预期工作,因为它返回它所使用的维度的所有值。例如,二维矩阵的所有X和/或Y值.

在Python2.6上,单冒号切片操作符在某些情况下似乎有不同的效果:例如,在常规的二维MxN矩阵上,m[:]可能导致作为结果片返回zeros(<some shape tuple>, 'l')。完整的矩阵是人们所期望的--这就是我们使用Python2.4所得到的。

在Python2.6中使用双冒号::或3点... (而不是单个冒号)似乎解决了这个问题,并返回了正确的矩阵切片。

经过一些猜测,我发现当输入0作为停止索引时,可以获得相同的零输出。例如,m[<any index>:0]返回与m[:]相同的“零”输出。在尝试执行m[:]时,是否有任何方法来调试选择了哪些索引?还是在两个Python版本(2.4到2.6)之间发生了一些变化,从而影响了切片操作符的行为?

使用的Numeric版本(24.2)在这两个版本之间是相同的。为什么单冒号切片在Python2.6上的工作方式与2.4版本不同?

Python2.6 2.6:

代码语言:javascript
运行
复制
>>> a = array([[1,2,3],[4,5,6]])
**>>> a[:]
zeros((0, 3), 'l')**

>>> a[::]
array([[1,2,3],[4,5,6]])

>>> a[...]
array([[1,2,3],[4,5,6]])

Python2.4:

代码语言:javascript
运行
复制
>>> a = array([[1,2,3],[4,5,6]])
**>>> a[:]
array([[1,2,3],[4,5,6]])**

>>> a[::]
array([[1,2,3],[4,5,6]])

>>> a[...]
array([[1,2,3],[4,5,6]])

(我从头到尾输入了“代码”,所以它可能不是完全准确的语法,也不是打印出来的,而是显示了正在发生的事情)

EN

Stack Overflow用户

发布于 2016-02-27 22:20:59

我想我10年前用的是2.4。我当时使用了numpy,但可能已经为其NETCDF功能添加了Numeric。但细节是模糊的。而我现在没有这些版本的测试。

那时的Python文档应该很容易浏览。numpy/Numeric文档较少。

我认为Python总是对列表进行基本的:切片。alist[:]用于复制,alist[1:-1]用于切片第一个和最后一个元素,等等。

我不知道什么时候添加了step,例如alist[::-1]来反转列表。

Python开始根据数值开发人员的要求识别索引元组,例如arr[2,4]arr[(2,4)]arr[:, [1,2]]arr[::-1, :]。但我不知道那是什么时候出现的

Ellipsis也主要用于多维索引。Python解释器识别...,但列表不处理它。大约在同一时间,:符号被正式实现为slice

在3.5中,我们可以用slice反转列表

代码语言:javascript
运行
复制
In [6]: list(range(10)).__getitem__(slice(None,None,-1))
Out[6]: [9, 8, 7, 6, 5, 4, 3, 2, 1, 0]

我建议几件事:

  • 确保您理解当前系统中的numpy (和list)索引/切片
  • 在旧的版本中尝试同样的事情;问这样的问题,并给出具体的例子。不要指望我们中的任何人有旧代码的记忆。
  • 研究文档,以便在可疑的特征更改或添加时找到。
票数 0
EN
查看全部 2 条回答
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/35663958

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档