gpt4 book ai didi

python-3.x - 根据 python 矩阵中特定行中的值相应地计算列值

转载 作者:行者123 更新时间:2023-12-01 02:39:27 24 4
gpt4 key购买 nike

mat = [ [1,3,5,7], [1,2,5,7], [8,2,3,4] ]

我必须设计一个函数,在考虑引用行的情况下计算具有相同值(每列)的行数。

每一行的结果数组将是

row0 = [2,1,2,2]
row1 = [2,2,2,2]
row3 = [1,2,1,1]

矩阵mat的每一行都是一个用户,每一列都是用户在定义的时间单位内的位置的标签。所以我必须计算每个定义的时间(即列)有多少用户共享相同的位置。

我尝试使用 numpy count_nonzero 函数,但它需要一个条件,即我无法分布在所有引用行中

最佳答案

这是一个使用 `argsort 的 numpy 解决方案。这可以处理非整数条目:

import numpy as np

def count_per_col(a):
o = np.argsort(a, 0)
ao = np.take_along_axis(a, o, 0)
padded = np.ones((ao.shape[1], ao.shape[0]+1), int)
padded[:, 1:-1] = np.diff(ao, axis=0).T
i, j = np.where(padded)
j = np.maximum(np.diff(j), 0)
J = j.repeat(j)
out = np.empty(a.shape, int)
np.put_along_axis(out, o, J.reshape(out.shape[::-1]).T, 0)
return out

mat = np.array([[1,3,5,7], [1,2,5,7], [8,2,3,4]])

count_per_col(mat)
# array([[2, 1, 2, 2],
# [2, 2, 2, 2],
# [1, 2, 1, 1]])

有多快?

from timeit import timeit

large = np.random.randint(0, 100, (100, 10000))
large = np.random.random(100)[large]

timeit(lambda: count_per_col(large), number=10)/10
# 0.1332556433044374

关于python-3.x - 根据 python 矩阵中特定行中的值相应地计算列值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55118291/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com