首页 > 解决方案 > 如何计算添加两个轴?

问题描述

更新:道歉。我已经更新了代码以匹配现在的输出。

import numpy as np

x = np.arange(0,4,1)
matrix = x[:6,np.newaxis] + x[np.newaxis,:]

这会生成在行和列中看起来像这样的表:

0 1 2 3
1 2 3 4
2 3 4 5
3 4 5 6

这是这个数组:

array([[0, 1, 2, 3],[1, 2, 3, 4],[2, 3, 4, 5],[3, 4, 5, 6]])

我的问题是 numpy 如何将每个单元格相加来产生这个结果?

标签: pythonnumpy

解决方案


在我的环境中,您的代码不会给出该结果。我使用您的代码得到的矩阵是这样的:

[[0, 2],
 [2, 4]]

为了理解这个结果的计算方式,让我们拆分这个过程:

#--- 1
x = np.arange(0,4,2)

第一行得到一个 0 到 4 之间的数字数组,步长为 2(不包括 4)。此行的输出是以下数组:

[0, 2]

接下来是等式的两个部分:

#--- 2
part1 = x[:4,np.newaxis]
part2 = x[np.newaxis,:]

第一部分采用数组 x 的前 4 个元素并将其扩展为轴索引 1(所以现在我们原始数组的元素位于轴索引 0(行)中)。这部分的输出如下:

[[0],
 [2]]

第二部分采用数组 x 并扩展轴索引 0 中的维度(原始数组的元素现在是轴索引 1(列))。这部分的输出是:

[[0, 2]]

最后添加两个部分:

matrix = part1 + part2

其结果是以下矩阵:

[[0, 2],
 [2, 4]]

在每个索引组合处,例如 [0, 1],结果是 part1 在索引 [0] 处的元素加上 part2 在索引 [1] 处的元素的数组,因此结果是 0 + 2 = 2。类似地:

matrix[0, 0] = part1[0] + part2[0] = 0 + 0 = 0
matrix[0, 1] = part1[0] + part2[1] = 0 + 2 = 2
matrix[1, 0] = part1[1] + part2[0] = 2 + 0 = 2
matrix[1, 1] = part1[1] + part2[1] = 2 + 2 = 4

编辑:是的,更新后的代码给出了您提到的结果。无论如何,同样的逻辑适用。


推荐阅读