python - 有效地减去不同形状的numpy数组

标签 python arrays numpy vectorization array-broadcasting

使用 numpy 的优秀广播规则,您可以从形状 (5,3) 数组 X 中减去形状 (3,) 数组 v

X - v

结果是一个形状为 (5,3) 的数组,其中每一行 i 是差值 X[i] - v

有没有办法从X中减去形状为(n,3)的数组w,这样w的每一行都减去形式整个数组 X 而不显式使用循环?

最佳答案

您需要使用 None/np.newaxis 扩展 X 的维度形成一个 3D 数组,然后用 w 做减法。这将带来 broadcasting为这个 3D 操作发挥作用,并产生形状为 (5,n,3) 的输出。实现看起来像这样 -

X[:,None] - w  # or X[:,np.newaxis] - w

相反,如果所需的顺序是 (n,5,3),那么您需要扩展 w 的维度,就像这样 -

X - w[:,None] # or X - w[:,np.newaxis] 

sample 运行-

In [39]: X
Out[39]: 
array([[5, 5, 4],
       [8, 1, 8],
       [0, 1, 5],
       [0, 3, 1],
       [6, 2, 5]])

In [40]: w
Out[40]: 
array([[8, 5, 1],
       [7, 8, 6]])

In [41]: (X[:,None] - w).shape
Out[41]: (5, 2, 3)

In [42]: (X - w[:,None]).shape
Out[42]: (2, 5, 3)

关于python - 有效地减去不同形状的numpy数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33677183/

相关文章:

python - Django 使用 request.user.get_username() 填充隐藏输入

python - PEP8 E112 不应该出现缩进错误?

python - 如何定位NetworkX中巨型组件的中心节点?

python - 更改从 Python 中的文件导入的数据的格式

python - 在使用 imread 函数读取 jpg 文件时,是否有任何可能的原因在 opencv 中遇到一些困难?

python - 为什么我的命令在 Sage 笔记本上没有改变颜色?那么如何编译在Sage笔记本上编写的程序呢?

javascript - 在 react 中添加基于索引数组的类

JavaScript 数组不可迭代

c - 为矩阵动态分配数组

python - 计算温度的偏导数(温度的水平平流)