python - 如何计算添加两个轴?
问题描述
更新:道歉。我已经更新了代码以匹配现在的输出。
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 如何将每个单元格相加来产生这个结果?
解决方案
在我的环境中,您的代码不会给出该结果。我使用您的代码得到的矩阵是这样的:
[[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
编辑:是的,更新后的代码给出了您提到的结果。无论如何,同样的逻辑适用。
推荐阅读
- c - 为什么有些 Linux 系统调用没有包装器,但被记录为好像有包装器一样?
- angular - 错误输出是:未知选项:'--extract-css'
- image-processing - 在 PyTorch 中显示卷积结果
- laravel - 验证用户名不存在
- java - 在 HtmlUnit 中获取真正的 html 代码的问题
- git - Git:推送时无法从远程存储库中读取
- php - 如何将十进制格式转换为数字格式
- python - Heroku 卡在为 Django 应用程序构建源代码
- mysql - 从单独的 Docker 容器运行 mysqldump 进行每日备份
- excel - 获取对象_worksheet的运行时错误1004方法粘贴失败