You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用numpy数组的多个元素对矩阵进行缩放?

用Numpy实现矩阵元素逐个缩放生成高维数组

假设我们有一个4×4的Numpy数组F:

import numpy as np

F = np.array([[ 0,  1,  2,  3],
              [ 4,  5,  6,  7],
              [ 8,  9, 10, 11],
              [12, 13, 14, 15]])

还有一个3×2的数组A,我们需要用A中的每个元素分别缩放F,最终得到一个形状为(3, 2, 4, 4)的数组,每个位置对应A中元素与F的乘积。

解决方案:利用Numpy广播机制

Numpy的广播特性可以轻松处理这种维度扩展的运算,不需要手动循环。只需要给A添加两个单维度,让它的维度和F对齐,再直接做乘法即可:

A = np.array([[0, 1],
              [2, 3],
              [4, 5]]) 

# 给A添加两个新维度,形状从(3,2)变为(3,2,1,1)
output = A[:, :, np.newaxis, np.newaxis] * F

验证结果

生成的output形状为(3, 2, 4, 4),和预期一致,具体内容如下:

print(output)
# 输出:
array([[[[ 0,  0,  0,  0],
         [ 0,  0,  0,  0],
         [ 0,  0,  0,  0],
         [ 0,  0,  0,  0]],

        [[ 0,  1,  2,  3],
         [ 4,  5,  6,  7],
         [ 8,  9, 10, 11],
         [12, 13, 14, 15]]],


       [[[ 0,  2,  4,  6],
         [ 8, 10, 12, 14],
         [16, 18, 20, 22],
         [24, 26, 28, 30]],

        [[ 0,  3,  6,  9],
         [12, 15, 18, 21],
         [24, 27, 30, 33],
         [36, 39, 42, 45]]],


       [[[ 0,  4,  8, 12],
         [16, 20, 24, 28],
         [32, 36, 40, 44],
         [48, 52, 56, 60]],

        [[ 0,  5, 10, 15],
         [20, 25, 30, 35],
         [40, 45, 50, 55],
         [60, 65, 70, 75]]]])

原理说明

Numpy广播会自动将维度为1的轴扩展到匹配的长度:

  • A添加维度后形状为(3,2,1,1)
  • F的形状为(4,4),会被自动视为(1,1,4,4)
  • 两者相乘时,每个维度都会扩展到最大的长度,最终得到(3,2,4,4)的结果,完全符合需求。

内容的提问来源于stack exchange,提问作者learning statistics

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.02 06:03:25