python - 添加不同维度的矩阵

标签 python numpy matrix tensorflow

在 numpy 和 tensorflow 中,如果较小矩阵的形状是较大矩阵的后缀,则可以添加不同维度的矩阵(或张量)。这是一个例子:

x = np.ndarray(shape=(10, 7, 5), dtype = float)
y = np.ndarray(shape=(7, 5), dtype = float)

对于这两个矩阵操作 x+y 是一个快捷方式:

for a in range(10):
    for b in range(7):
        for b in range(5):
            result[a,b,c] = x[a,b,c] + y[b,c]

然而,在我的例子中,我有形状为 (10,7,5)(10,5) 的矩阵,同样我想执行 + 使用类似逻辑的操作:

for a in range(10):
    for b in range(7):
        for b in range(5):
            result[a,b,c] = x[a,b,c] + y[a,c]
                                         ^

但是在这种情况下,x+y 操作失败,因为 numpy 和 tensorflow 都无法理解我想要做什么。有什么方法可以有效地执行此操作(无需自己编写 python 循环)?

到目前为止,我认为我可以像这样使用 einsum 引入形状为 (10,7,5) 的临时矩阵 z:

z = np.einsum('ij,k->ikj', y, np.ones(7))
x + z

但这会创建一个明确的三维矩阵(或张量),如果可能的话,我宁愿避免这种情况。

最佳答案

在 NumPy 中,您可以将 y 扩展为 3D,然后添加 -

x + y[:,None,:]

还没有真正处理过 tensorflow,但是查看它的文档,我们似乎可以使用 tf.expand_dims -

x + tf.expand_dims(y, 1)

扩展版本仍然是 y 的 View ,因此不会再占用内存,如下面所测试的 -

In [512]: np.may_share_memory(y, y[:,None,:])
Out[512]: True

关于python - 添加不同维度的矩阵,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42214228/

相关文章:

python - Django 模板/ View 与轮播的问题

python - 在 pandas 中传播缺失日期的值

c++ - 我该如何编码这个问题? (C++)

matlab - 在矩阵matlab中找到最接近的值

r - 防止 R 将矩阵降级为向量

python - 如果文件在 Excel 中打开,pd.read_excel 会抛出 PermissionError

用于数学的 Java 或 Python?

python - 使用条件对数组进行排序的有效方法

numpy:在二维数组的每一行中找到值的第一个索引

python - 将位串 numpy 数组转换为整数基数 2 的最快方法