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

python - 如何使用广播来加速这段代码?

我有以下多维数组。第一个轴表示一个 3 维向量。我想为每个计算 3×3 矩阵 x⋅x'。

我目前的解决方案:

这个 for 循环遍历所有 25,276,416 个元素,大约需要 1 或 2 分钟。

0 投票
1 回答
4723 浏览

python - 如何按列广播数组?

我想将矩阵的每一列添加到一个 numpy 数组中,但numpy.broadcast只允许将矩阵的每一行添加到一个数组中。我怎样才能做到这一点?

我的想法是首先转置矩阵,然后将其添加到数组中,然后转回,但这使用了两个转置。有没有直接做的功能?

0 投票
1 回答
3335 浏览

python - 如何获得 numpy 二维数组中列的排名?

假设我有一个数组:

我想获得每行(即np.array([0, 1, 3]))中第 0 列的排名,有没有捷径可以做到这一点?

在 1d 数组中,我可以使用它np.sum(a < a[0])来执行此操作,但是 2d 数组呢?但似乎 < 无法广播。

0 投票
1 回答
447 浏览

arrays - Numpy:沿任意维度查找非零值

似乎我无法在 Numpy 中解决这个问题:我有一个矩阵,具有任意数量的维度,以任意方式排序。在这个矩阵里面,总有一个维度是我感兴趣的(就像我说的,这个维度的位置并不总是一样的)。现在,我想沿着这个维度找到第一个非零值。事实上,我需要该值的索引来对值本身执行一些操作。一个例子:如果我的矩阵an x m x p并且我感兴趣的维度是数字 1,我会做类似的事情:

除了性能考虑之外,我真的不知道如何在具有不同数量的维度以及对任意位置感兴趣的维度上做到这一点。

0 投票
1 回答
1585 浏览

python - NumPy ndarray 广播 - 形状(X,)与(X,1)与(X,Y)一起操作

我有一个 NumPy ndarray,它的形状为 (32, 1024) 并保存 32 个信号测量值,我想将它们组合成一个 1024 个元素长的阵列,每个 32 个元素的权重不同。我正在使用numpy.average,但我的权重很复杂,而且average根据抛出我的结果的总和对权重进行归一化。

查看平均值的代码,我意识到我可以通过将权重乘以信号数组然后在第一个轴上求和来完成同样的事情。但是,当我尝试将我的 (32,) 权重数组乘以 (32, 1024) 信号数组时,我得到一个维度不匹配,因为 (32,) 无法广播到 (32, 1024)。如果我将权重数组重塑为 (32, 1) 则一切都按预期工作,但这会导致相当难看的代码:

谁能解释为什么 NumPy 不允许我的 (32,) 数组广播到 (32, 1024) 和/或建议一种替代的、更简洁的方法来执行加权平均?

0 投票
2 回答
450 浏览

python - 广播一列二维数组与多列的比较

在 2d ndarray 中将一列与其他列进行比较的正确 numpy 语法是什么?

在阅读了一些关于数组广播的 文档后,我仍然不太确定这样做的正确方法是什么。

示例: 假设我有一个二维数组,每个玩家(行)在每场比赛(列)中得分。

我想知道,在最后一场比赛中,球员是否通过得分比之前任何一场比赛都多的进球创造了个人记录,忽略了她没有出现的比赛(表示为nan)。我只希望True数组中的第一个和最后一个玩家。

只写goals[:,2] > goals[:,:2]返回ValueError: operands could not be broadcast together with shapes (5,) (5,2)

我尝试了什么:我知道我可以手动将其拉伸(5,)成. 所以这有效:(5,2)np.newaxis

有没有一种不那么老套、更惯用的 numpy 方式来写这个?

0 投票
2 回答
7998 浏览

python - 在python中沿特定轴广播操作

在 python 中,假设我有一个大小为nxnnumpy的方阵X,并且我有一个大小为n的向量anumpy

很简单,我想执行X - a的广播减法,但我希望能够指定沿哪个维度,以便我可以指定减法是沿轴 0 还是轴 1。

如何指定轴?

0 投票
2 回答
557 浏览

python - Numpy根据列表折叠列

NumPy中,我有一个d x n数组A和一个L长度列表n,描述了我希望每列A在矩阵中结束的位置B。这个想法是i矩阵的列是对应的值Bsum的所有列中的列。ALi

我可以用一个for循环来做到这一点:

我想知道是否有办法通过切片数组A(或以其他矢量化方式)来做到这一点?

0 投票
2 回答
102 浏览

python - 用numpy从edgelist中累积“neigborhood”的值

我有一个无向网络,其中每个节点都可以是k类型之一。对于每个节点i,我需要计算节点i具有的每种类型的邻居数。

现在我用一个边缘列表来表示边缘,其中列是节点的索引。节点表示为nxk矩阵,其中每一列代表一个节点类型。如果节点的类型为k,则第k列的值为 1,否则为 0。

这是我当前的代码,它是正确的,但太慢了。

是否有一些聪明的 numpy 可以让我避免这种 for 循环?如果最好的方法是使用邻接矩阵,那也是可以接受的。

0 投票
1 回答
1456 浏览

python - 在 Python 中将大量数字写入 HDF5 文件

我目前有一个包含一百万行和每列大约 10000 列(可变长度)的数据集。

现在我想将此数据写入 HDF5 文件,以便以后使用。我得到了这个工作,但它非常慢。即使是 1000 个值也需要几分钟才能存储在 HDF5 文件中。

我一直在到处寻找,包括 SO 和 H5Py 文档,但我真的找不到任何描述我的用例的东西,但我知道可以做到。

下面我制作了一个演示源代码,描述了我现在正在做的事情:

该数据来自数据库,它不是源代码中所见的预先生成的 np 数组。

如果您运行此代码,您会看到它需要很长时间才能打印出“完成 1000 个值”。

我在一台具有 8GB 内存、Ubuntu 16.04 LTS 和 Intel Core M(其性能类似于 Core i5)和 SSD 的笔记本电脑上,它必须足以比这更快一点。

我在这里阅读了有关广播的信息:http: //docs.h5py.org/en/latest/high/dataset.html

当我这样使用它时:

它已经快了一个数量级(完成只需几秒钟)。但我不知道如何让它与可变长度数据集一起使用(列是可变长度的)。很高兴能对如何做到这一点有所了解,因为我认为我现在对 HDF5 的概念没有一个好主意:) 非常感谢!