如何避免 `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
这是我的代码。我想避免 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