numpy 数组索引技术如何为相同的输入代码提供不同的输出?
How can numpy array indexing techniques can give different outputs for same input code?
#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, 1, 21, 29, 15],
[22, 22, 28, 10, 31],
[47, 49, 41, 10, 10]])
当您调用 first[:]
时,您将准确收到 first
,因为您要求 first
:
中的所有行
>>> second = first[:]
>>> second
array([[15, 29, 18, 8, 3],
[42, 1, 21, 29, 15],
[22, 22, 28, 10, 31],
[47, 49, 41, 10, 10]])
所以当你得到 second[1]
你得到索引 1
的行
>>> third = second[1]
>>> third
array([42, 1, 21, 29, 15])
然而,当你请求 x_2d[0,:,1]
时,numpy 将其解释为:
“从矩阵 0 给我第 1 列,来自由行 0,1,2,3) 组成的矩阵”
因此,如果您要求 x_2d[1,0:2,3]
,结果将是 [18, 2]
。
结论:numpy 对 x[0,:,1]
的解释与 x[0][:][1]
不同。您可以在 NumPy 文档中阅读更多内容 here.
#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, 1, 21, 29, 15],
[22, 22, 28, 10, 31],
[47, 49, 41, 10, 10]])
当您调用 first[:]
时,您将准确收到 first
,因为您要求 first
:
>>> second = first[:]
>>> second
array([[15, 29, 18, 8, 3],
[42, 1, 21, 29, 15],
[22, 22, 28, 10, 31],
[47, 49, 41, 10, 10]])
所以当你得到 second[1]
你得到索引 1
>>> third = second[1]
>>> third
array([42, 1, 21, 29, 15])
然而,当你请求 x_2d[0,:,1]
时,numpy 将其解释为:
“从矩阵 0 给我第 1 列,来自由行 0,1,2,3) 组成的矩阵”
因此,如果您要求 x_2d[1,0:2,3]
,结果将是 [18, 2]
。
结论:numpy 对 x[0,:,1]
的解释与 x[0][:][1]
不同。您可以在 NumPy 文档中阅读更多内容 here.