Numpy indexing reorders array(块索引重新排序数组)
本文介绍了块索引重新排序数组的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
我刚才无意中发现了一种我不太理解的麻木索引行为。看起来Numpy正在根据索引架构更改我的轴的顺序。不幸的是,我在文档中找不到对以下内容的解释。有人能给我解释一下是怎么回事吗?
# This is expected: dimension 1 is reduced to length 1:
print np.ndarray(shape=(3,3,3,3))[:, [0], :, :].shape
>>> (3, 1, 3, 3)
# This is the unexpected behavior:
print np.ndarray(shape=(3,3,3,3))[:, [0], :, 0].shape
>>> (1, 3, 3)
我预计第二个命令会产生(3,1,3)。如果我从第四个维度中选取一个元素,为什么前两个维度的形状会发生变化? 事先非常感谢!
编辑: 我在带有Python 2.7.11的Numpy 1.11.0上看到了这一点
推荐答案
这是预期行为.NumPy对使用切片索引的轴和使用数组索引的轴的处理方式不同。默认行为是,在使用切片索引的轴的结果形状之前,结果形状将具有使用数组索引的轴的结果形状。这意味着奇怪的是第一种情况,应该是(1, 3, 3, 3)
。但有人认为,对于某些简单的情况(如您的情况),这会使用户感到困惑,因此,当所有使用数组索引的轴组合在一起时,结果形状会放在输出形状的位置,即数组索引轴簇在原始数组中的位置。
您可以自己测试:
>>> print np.ndarray(shape=(3,3,3,3))[:, [0], [0], :].shape
(3, 1, 3)
正如您所经历的,这种聪明可能比始终如一的行为更令人困惑。NumPy开发人员的共识是,最好不要以不同的方式对待集群数组索引轴,甚至有a PR implementing indexer attributes可以实现更合理的索引。
出于向后兼容性考虑,默认索引不太可能很快更改,尽管在不远的将来它可能会在某些情况下开始发出弃用警告。
这篇关于块索引重新排序数组的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持编程学习网!
沃梦达教程
本文标题为:块索引重新排序数组


基础教程推荐
猜你喜欢
- 合并具有多索引的两个数据帧 2022-01-01
- 使用Python匹配Stata加权xtil命令的确定方法? 2022-01-01
- Python 的 List 是如何实现的? 2022-01-01
- 使用 Google App Engine (Python) 将文件上传到 Google Cloud Storage 2022-01-01
- 将 YAML 文件转换为 python dict 2022-01-01
- 哪些 Python 包提供独立的事件系统? 2022-01-01
- 如何在 Python 中检测文件是否为二进制(非文本)文 2022-01-01
- 症状类型错误:无法确定关系的真值 2022-01-01
- 如何在Python中绘制多元函数? 2022-01-01
- 使 Python 脚本在 Windows 上运行而不指定“.py";延期 2022-01-01