问题标签 [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 回答
5891 浏览

python - np.dot() 与 Python 广播

我有两个 numpy 数组,一个形状为 (3000,),另一个是 20 个 3000 x 3000 矩阵的数组,即形状 (20, 3000, 3000)

我正在做一个 numpy dot 产品。

这行得通,输出dotprod1是一个形状为 (20, 3000) 的数组。

但是,如果我想再次使用点积怎么办?

这给出了一个错误。

我想输出 20 个值。如何使用广播来做到这一点?

0 投票
2 回答
178 浏览

python - 在这个 numpy 示例中如何应用广播?

我正在学习 numpy 并且对广播有点困惑,这是我的设置。我有两个矩阵

所以 r 是 (3*1) 矩阵,而 y 是一个秩为 1 的矩阵,形状为 (3,)。

如果我做 y.dot(r),我得到 14,假设 numpy 在 y 上应用广播,使其成为 (1*3),然后它与 r(3*1) 进行点积,因此结果矩阵将为 1* 1.

但是,当我执行 r.dot(y) 时,它会引发错误。为什么它在这里不做同样的事情?它应该使 y(1*3) 和 r 成为(3*1),它应该给出一个 3*3 矩阵。这个推理有什么问题?

0 投票
1 回答
535 浏览

python - Numpy 函数获取添加数组的形状

tl; dr:如何预测 numpy 在多个数组中广播返回的形状,而无需实际添加数组?

我有很多使用 numpy (Python) 广播规则的脚本,因此基本上一维输入会产生多维输出。举个基本的例子,理想气体定律(压力 = rho * R_d * 温度)可能看起来像

这里没有必要,但在更复杂的函数中,用正确的形状初始化数组非常有用。如果压力和温度具有相同的形状,则 rho 也具有该形状。如果压力具有形状 (n,) 而温度具有形状 (m,),我可以调用

得到形状为 (n,m) 的 rho。这让我无需循环就可以绘制具有多个温度值的图rhoIdeal,同时仍然允许脚本接受相同形状的数组并逐个元素地计算结果。

我的问题是:是否有一个内置函数可以返回与多个输入兼容的形状?行为类似的东西

实际上不必对数组求和?如果没有内置函数,一个好的实现会是什么样子?

0 投票
2 回答
16940 浏览

python - how to multiply pandas dataframe with numpy array with broadcasting

I have a dataframe of shape (4, 3) as following:

I want to multiply each column of the dataframe with a numpy array of shape (4,):

In numpy, the following broadcasting trick works:

However, it doesn't work in the case of pandas dataframe, I get the following error:

Any suggestions?

Thanks!

0 投票
2 回答
107 浏览

python - 在 Numpy 中更快地执行 `A[tuple(BT)]`

我有一个 M 乘 N 数组I,其中的每一行都是一个 N 维数组的索引A。我想要一个矢量化表达式来从 A 中获取 M 索引值的一维数组。我发现这样A[tuple(I.T)]做是正确的,但分析表明它非常昂贵,尽管被矢量化了。它也不是特别优雅或“自然”,A[I]并且A[I.T]做一些完全不同的事情

这样做的正确方法是什么?它也应该适用于像

0 投票
3 回答
83 浏览

python - Adding a 1-D Array to a 3-D array in Numpy

I am attempting to add two arrays.

I want to get something out that is like

So adding entries to each of the matrices at the corresponding column. I know I can code it in a loop of some sort, but I am trying to use a more elegant / faster solution.

0 投票
3 回答
12591 浏览

python - 使用 Python 广播的内存高效 L2 规范

我正在尝试使用欧几里得距离实现一种方法,根据它们与样本数据集的相似性对测试数据集中的点进行聚类。测试数据集有 500 个点,每个点是一个 N 维向量(N=1024)。训练数据集大约有 10000 个点,每个点也是一个 1024 维向量。目标是找到每个测试点和所有样本点之间的 L2 距离,以找到最接近的样本(不使用任何 python 距离函数)。由于测试数组和训练数组的大小不同,我尝试使用广播:

其中 test 是一个形状数组 (500,1024),而 train 是一个形状数组 (10000,1024)。我收到了 MemoryError。但是,相同的代码适用于较小的数组。例如:

有没有更高效的内存方法来进行上述计算而无需循环?根据网上的帖子,我们可以使用矩阵乘法 sqrt(X * X-2*X * Y+Y * Y) 来实现 L2-范数。所以我尝试了以下方法:

由于矩阵具有不同的形状,当我尝试广播时,存在维度不匹配,我不确定什么是正确的广播方式(对 Python 广播没有太多经验)。我想知道在 Python 中将 L2 距离计算实现为矩阵乘法的正确方法是什么,其中矩阵具有不同的形状。结果距离矩阵应具有 dist[i,j] = 测试点 i 和样本点 j 之间的欧几里得距离。

谢谢

0 投票
1 回答
895 浏览

numpy - 在另一个更大的数组中插入 3D 数组的值的最佳方法

必须有一些'pythonic'方式来做到这一点,但我不认为np.place, np.insert, 或者np.put是我正在寻找的。我想用A较小的 3D 数组替换大型 3D 数组中的值B,从较大数组中的位置开始[i,j,k]。看图:

我想输入类似A[i+, j+, k+] = Bnp.embed(B, A, (i,j,k))之类的内容,但当然这些都不正确。

编辑:哦,有这个。所以我应该修改这个问题,问这是否是最好的方法(“最好”意味着笔记本电脑上 500x500x50 的浮点数组最快):

一个 3D 阵列在另一个内部

0 投票
1 回答
204 浏览

python - 使用 Numpy 数组,出现错误

我正在尝试编写函数,为 BS 模型计算金融希腊语
我从这样的事情开始:

'...' 表示,正在计算更多的希腊语,但这并不重要。
它工作正常,我有合理的价值观,漂亮的情节等;但是,我的老师告诉我,他希望看到这些值不仅与时间(x 轴上的 tau)相比,而且与 S(S - 股票价格,x 轴上)的对比。换句话说,我必须计算 tau 和 S 变化的希腊语。

我试过以下:

对于这两个版本,我都初始化了以下参数并运行(a-variable):

它在第一种情况下工作正常,但是当我想改变 S(第二个函数)时,我收到以下错误:

我用谷歌搜索了一下,看起来 Numpy 库和它的数据类型(数组)有一些东西。我不是非常熟练或经验丰富的程序员(仍在学习),所以我自己无法弄清楚。
看起来它现在只适用于 S == 100 (S = T),但这不是理想的解决方案。
我试过了:

但它只输出:

请帮我找到这个可行的解决方案。我不知道我是否应该尝试循环 S(我尝试过但失败了......),做一些数据类型技巧,以其他方式计算(如何?)或其他任何方式。

0 投票
1 回答
165 浏览

python - 将不同大小的numpy数组相乘

假设我有:

我想要的是一种矢量化且有效的方法:

尽可能快地运行非常重要。