问题标签 [array-broadcasting]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
2414 浏览

python - numpy 3D点积

我有两个 3dim numpy 矩阵,我想根据一个轴做一个点积而不使用循环:

a 具有 (7, 4, 15) 的形状,b 具有 (7, 4, 5) 的形状。我希望 c=np.dot(a,b) 的大小为 (7,5,15),如下所示:

但我正在寻找没有 for 循环的解决方案。就像是:

但是这个没有按预期工作。

我也试过这个:

没有按预期工作。

有任何想法吗?

0 投票
2 回答
110 浏览

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

考虑以下代码。

第一个电话f(x1, y1)按预期工作。

第二次调用,浮动需要在它工作之前“转换”(我希望转换对用户透明,所以转换应该包含在函数的定义中)。

第三次调用根本不起作用,我不知道如何调整函数的定义,以便它与第一次调用相同,但对于网格上的某些点。

有任何想法吗?谢谢。

0 投票
2 回答
2694 浏览

python - 如何仅用另一个数组的值替换 numpy 数组的值的一部分?

我正在尝试按照屏蔽广播的方式做一些事情,其中​​只广播某些值。

假设我有一个更大的数组更大的数组和一个更小的数组smaller_array:

现在,我只想要较小数组的前三个值来替换较大数组的某个部分的值,但是掩码并没有达到我希望的效果:

这只是返回与常规广播相同的内容,即:

而不是我所希望的

在通过覆盖之前剥离屏蔽值

也没有用,因为这会使阵列变平,使广播不兼容。

有没有其他方法可以达到同样的效果?

0 投票
2 回答
1169 浏览

python - 简单的减法会导致不同数组形状的广播问题

我尝试使用此链接解决我的问题,描述 numpy 广播,但无济于事。如何减去以下numpy数组:

当我这样做X - X_mean时:

但是这样做X[0] - X_mean[0]会给出正确的输出:

0 投票
1 回答
714 浏览

python - 使用 numpy.frompyfunc 将广播添加到带有参数的 python 函数

从一个数组db(大约是(1e6, 300))和一个mask = [1, 0, 1]向量中,我将目标定义为第一列中的 1。

我想创建一个out向量,该向量由其中对应的行db匹配maskandtarget==1和其他任何地方的零组成。

我已经定义了一个vline函数,该函数将 amask应用于每个数组行,np.array_equal(mask, mask & vector)用于检查向量 101 和 111 是否适合掩码,然后仅保留索引 where target == 1

out被初始化为array([0, 0, 0, 0, 0, 0])

vline函数定义为:

for通过在循环中逐行应用此函数,我得到了正确的结果:

现在我想vline通过创建一个矢量化ufunc

但是ufunc抱怨用这些形状广播输入:

0 投票
1 回答
338 浏览

python - 在numpy中乘以包含图像的张量

我有以下三阶张量。两个张量矩阵第一个张量包含 100 个 10x9 矩阵,第二个包含 100 个 3x10 矩阵(我刚刚在这个例子中填充了这些矩阵)。

我的目标是将矩阵乘以一对一的对应关系,这将产生一个具有形状的张量: (100, 3, 9)这可以通过一个 for 循环来完成,该循环只压缩两个张量,然后取每个张量的点,但我正在寻找只需使用 numpy 运算符即可。到目前为止,这里有一些失败的尝试

尝试1:

尝试 1 的输出:

(100, 3, 100, 9)

这意味着它尝试了所有可能的组合......这不是我所追求的。

实际上没有其他尝试甚至编译。我尝试使用 np.tensordot , np.einsum (在这里阅读https://jameshensman.wordpress.com/2010/06/14/multiple-matrix-multiplication-in-numpy它应该可以完成这项工作,但我没有得到正确的爱因斯坦指数)同样在同一个链接中,还有一些我无法想象的疯狂张量立方体重塑方法。关于如何解决这个问题的任何建议/想法解释?

0 投票
1 回答
1962 浏览

python - 为什么 Python/Numpy 需要矩阵/向量点积的行向量?

假设我们要计算矩阵和列向量的点积:

矩阵点向量

所以在 Numpy/Python 中,我们开始:

结果是:

数组([[13],[31],[49]])

到目前为止,一切都很好,但是为什么这也有效?

结果是:

数组([13, 31, 49])

我希望 [2,1,3] 是一个行向量(需要转置来应用点积),但 Numpy 似乎默认将数组视为列向量(在矩阵乘法的情况下)?

这是如何运作的?

编辑:

为什么是:

所以矩阵点向量数组确实有效(因此它将其视为列向量),但是其他操作(转置)不起作用。这不是真正一致的设计,不是吗?

0 投票
3 回答
58 浏览

arrays - Numpy: Creating an (x,y,2,2) array from 4 (x,y) arrays

I'm having an issue with broadcasting. I want to be able to assign elements from 4 different arrays of shape x, y to 2x2 matrices without a for loop if possible.

obviously this doesn't work but I'd like x to come out an array of:

0 投票
1 回答
119 浏览

python - 多参数估计。广播问题

我需要使用非线性最小二乘回归来获取参数(kf、beta1、beta2、gamma)。错误消息是:“ValueError:操作数无法与形状 (4,7) (0,) 一起广播”

我用收集的下一个数据做了 4 次实验:

  • flujo_ms(x-axis Data): 7个位置的数组
  • “fri”:每个“fri”是一个包含 7 个位置的数组。
  • brfv:取四个常数值,每个实验一个常数。

我想同时使用四个实验来最小化参数估计的误差。

0 投票
1 回答
100 浏览

arrays - 改变输入数组维度的广播函数

给定一些f接受1D数组并给出2D数组的函数,是否可以将它有效地应用于NxM数组的每一行A

更具体地说,我想申请数组np.triu的每一行,然后连接所有结果。我可以通过NxMA

B = np.dstack(map(np.triu, A))

这给出了MxMxN矩阵。然而,这对于大 N 来说不是很有效。不幸的是,np.apply_along_axis这里不能使用该函数,因为f会改变维度。

了解 NumPy 在高效广播方面的强大功能后,我几乎可以肯定存在更好的解决方案来解决我的问题。