python - Numpy "orthogonal"广播

标签 python numpy array-broadcasting

这感觉像是应该已经有问题的东西,但我找不到。

在 numpy 中,假设我有两个数组 AB,我怎样才能确保它们相互“正交”广播,而不管要么数组?例如我可以这样做:

import numpy as np

A1 = np.zeros((2,2))
A2 = np.zeros((2,2,2))
B = np.ones((2,2))

C1 = A1 + B[...,np.newaxis,np.newaxis]
C2 = A2 + B[...,np.newaxis,np.newaxis,np.newaxis]

print(C1.shape)
print(C2.shape)

给出

(2, 2, 2, 2)
(2, 2, 2, 2, 2)

作为输出。但为了做到这一点,我必须知道至少一个数组的维数。有没有办法在不知道他们中的任何一个的情况下做到这一点?希望这是有道理的。

最佳答案

reshape B 以包含与 A 中的 dims 一样多的尾随单例维度 -

A + B.reshape(B.shape + tuple([1]*A.ndim)) # where A is generic ndarray

一些 NumPy ufuncsouter 方法来处理所有这些工作。所以,对于添加,我们可以简单地使用 -

np.add.outer(B,A)

关于python - Numpy "orthogonal"广播,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49404966/

相关文章:

python - 无法让 python Turtle 在 Linux 上的 Pydev 中工作

python - pandas.DataFrame 和 numpy.array 中的 np.isreal 行为不同

python - 忽略 NaN 的 Pandas 聚合

numpy - 将 OpenCL 图像转换为 pyOpenCL 数组或 numpy ndarray

python - tf.Estimator 训练后检索张量 (Numpy) 值

python - 以 float 或 ndarray 作为参数的 numpy 函数

arrays - 在 numpy 数组中每行提取固定数量的元素

Python dt.replace(tzinfo=) 不改变 timezome

python - 当我的任务继承自 Task 类时,如何使用 @roles 装饰 Fabric 任务?

python - Julia:向量化序列的乘积