当前位置: 首页 > 面试题库 >

计算矩阵中一行出现的次数(numpy)

海典
2023-03-14
问题内容

有没有比numpy 2D数组更好的方法来计算给定行出现在numpy 2D数组中的次数

def get_count(array_2d, row):
    count = 0
    # iterate over rows, compare
    for r in array_2d[:,]:
        if np.equal(r, row).all():
            count += 1
    return count

# let's make sure it works

array_2d = np.array([[1,2], [3,4]])
row = np.array([1,2])

count = get_count(array_2d, row)
assert(count == 1)

问题答案:

一种简单的方法是broadcasting-

(array_2d == row).all(-1).sum()

考虑到内存效率,这是一种将每行array_2d作为n-dimensional网格上的索引元组并假设输入中为正数的一种方法-

dims = np.maximum(array_2d.max(0),row) + 1
array_1d = np.ravel_multi_index(array_2d.T,dims)
row_scalar = np.ravel_multi_index(row,dims)
count = (array_1d==row_scalar).sum()

这 是一篇讨论与之相关的各个方面的文章。

注意: 使用np.count_nonzero计数布尔值可能要快得多,而不是使用求和.sum()。因此,请考虑将其用于上述两个方法。

这是一个快速的运行时测试-

In [74]: arr = np.random.rand(10000)>0.5

In [75]: %timeit arr.sum()
10000 loops, best of 3: 29.6 µs per loop

In [76]: %timeit np.count_nonzero(arr)
1000000 loops, best of 3: 1.21 µs per loop


 类似资料:
  • 我有一个矩阵。只有唯一的颜色以不同的权重重复它们自己。从它们中,我得选择一半,另一半必须用从第一个中最接近的元素替换。 我想到了在图像中循环,并搜索最近的颜色为当前的一个。找到后,我把一个换成另一个。 但我有3个循环、、。前两个I循环通过RGB矩阵,第三个用于循环到包含最终颜色的矩阵。这需要一些时间来计算。 可以做些什么来加快它的速度? 循环如下所示: 表示选择为最终颜色的半色。 我可以考虑一些小

  • 问题内容: 我正在尝试计算中每行显示的数字,例如: 行显示3次。 一个简单的天真的解决方案将涉及将我所有的行都转换为元组,然后应用,如下所示: 产生: 但是,我担心我的方法的效率。也许有一个提供此功能的内置库。我将此问题标记为,因为我认为它可能具有我正在寻找的工具。 问题答案: 您可以使用另一个问题的答案来获得唯一项目的计数。 使用结构化数组的另一种选择是使用一种void类型的视图,该视图将整行连

  • 如上所述,我需要用Python找到矩阵的基-2-对数。当然,我知道公式$log_a(x)=ln(x)/ln(a)$,其中ln是自然对数,但据我所知,这只适用于标量参数x(如果我错了请纠正我)。至少我还没有看到任何论据,为什么这也适用于矩阵。 那么,有人知道是否存在这样一个内置在matrix-log2函数吗? 或者:由于几年前我使用过Mathematica,所以我知道了MatrixFunction[

  • 问题内容: 我正在尝试计算Java中的逆矩阵。 我遵循伴随方法(首先计算伴随矩阵,然后转置该矩阵,最后将其乘以行列式值的倒数)。 当矩阵不太大时有效。我检查过,对于尺寸最大为12x12的矩阵,可以快速提供结果。但是,当矩阵大于12x12时,完成计算所需的时间呈指数增长。 我需要反转的矩阵是19x19,并且花费太多时间。消耗更多时间的方法是用于行列式计算的方法。 我使用的代码是: 有人知道如何更有效

  • 问题内容: 我想通过Tensorflow计算Jacobian矩阵。 是)我有的: 是损失函数,都是可训练的变量,并且是许多数据。 但是,如果我们增加数据数量,则需要花费大量时间来运行该功能。有任何想法吗? 问题答案: 假设和是Tensorflow张量,并且取决于: 结果具有形状,并提供的每个元素相对于的每个元素的偏导数。

  • 我有两个列表,每个列表中有两个矩阵。。是否有一种方法可以对它们进行矩阵计算,即相加,其中matrix1中的蓝色矩阵与matrix2中的蓝色矩阵相加,matrix1中的红色矩阵与matrix2中的红色矩阵相加。我能想到的唯一方法是在循环中进行计算 请注意,我将有大约10个,以及不止一组(即蓝色、红色、绿色、紫色)