微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

numpy 数组索引技术如何为相同的输入代码提供不同的输出?

如何解决numpy 数组索引技术如何为相同的输入代码提供不同的输出?

#Code

import numpy as np    
np.random.seed(124)
x_2d = np.random.randint(1,50,(3,4,5))
print("I am getting wrong output => {}".format(x_2d[0][:][1]))
print("This is what I want => {} ".format(x_2d[0,:,1]))

# Code Ended

# Output for above code

I am getting wrong output => [42  1 21 29 15]
This is what I want => [29  1 22 49] 

我是 NumPy 的新手,所以我只是在试验 numpy 数组选择技术。我开始知道我们可以使用方括号方法或逗号方法。但是我遇到了一个问题。我正在尝试提取数组 0 的列索引 1。但是当我使用这两种技术时,我得到了不同的输出。我附上了代码片段和输出。谁能指导我哪里出错了?

解决方法

x[0][:][1] 等价于 x[0,1,:],后者也等价于 x[0][1]

单独使用 [:] 的原因基本上意味着“复制此数组”,在基本 Python 和 Numpy 中都是如此。因此,您可以将 x[0][:][1] 读作“获取数组 x 的第一个元素,复制它,然后获取结果的第二个元素。”

[:] 并不意味着“跳过一个维度”。

,

调用 x_2d[0][:][1] 时,首先得到第一个矩阵 x_2d[0]

>>> first = x_2d[0]
>>> first
array([[15,29,18,8,3],[42,21,15],[22,22,28,10,31],[47,49,41,10]])

当您调用 first[:] 时,您将收到准确的 first,因为您要求 first 中的所有行:

>>> second = first[:]
>>> second
array([[15,10]])

所以当你得到 second[1] 时,你得到索引 1 的那一行

>>> third = second[1]
>>> third
array([42,15])

但是,当您要求 x_2d[0,:,1] 时,numpy 将其解释为:

“从矩阵 0 给我从由行 0,2,3) 组成的矩阵中的第 1 列”

因此,如果您要求 x_2d[1,0:2,3],结果将是 [18,2]

结论:numpy 不会以与 x[0,1] 相同的方式解释 x[0][:][1]。您可以在 NumPy 文档 here 中阅读更多内容。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。