如何避免 `for` 循环为大数据建立索引

How to avoid `for` loops for indexing for huge data

这是我的代码。我想避免 for 循环进行大量迭代。

iterations = 10000
max_number = 9700
W = is a matrix(300,9700)

def grad_function(x,y):
    grad = np.sum(W*(x - y))
    return grad

x = np.arange(300)
y = np.arange(9700)

for i in range (iterations):
    for j in range(max_number):
        result = grad_function(x,y)
print(result)

我尝试使用 map() 函数,但它没有给我包含 9700 个元素的结果;相反,它给了我一个包含 300 个不正确元素的列表。

据我所知,map() 与嵌套的 for 循环基本相同,如果您需要检查矩阵中的每个值,这将是最快的选择之一无论如何。

我认为你正在尝试做这样的事情:

W = np.random.random((300, 9700))
x = np.arange(300)
y = np.arange(9700)

result = (W.T @ x) - y

那么result.shape就是(9700,)。或者,您可以使 W 具有 (9700, 300) 的形状,这样就不需要转置它了。

一般来说,您永远不需要使用 NumPy 进行循环。直接对数组进行数学运算即可。我在这里使用的唯一技巧是 @ 而不是 np.matmul.

如果您真的想使用数学函数,请务必传入它需要的所有内容:

def grad(x, y, W):
    return (W.T @ x) - y