在Python中循环遍历2d数组的最佳有效方法是什么



我是Python和机器学习的新手。我在网上找不到最好的方法。我有一个大的2d数组(distance _ matrix.shape=(471328624((。我写了下面的代码,但运行时间太长。For循环中的For循环需要很长时间。

distance_matrix = [[0.21218192, 0.12845819, 0.54545613, 0.92464129, 0.12051526, 0.0870853 ], [0.2168166 , 0.11174682, 0.58193855, 0.93949729, 0.08060061, 0.11963891], [0.23996999, 0.17554854, 0.60833433, 0.93914766, 0.11631545, 0.2036373]]

iskeleler = pd.DataFrame({
'lat':[40.992752,41.083202,41.173462],
'lon':[29.023165,29.066652,29.088163],
'name':['Kadıköy','AnadoluHisarı','AnadoluKavağı']
}, dtype=str)
for i in range(len(distance_matrix)):
for j in range(len(distance_matrix[0])):
if distance_matrix[i][j] < 1:
iskeleler.loc[i,'Address'] = distance_matrix[i][j]

print(iskeleler)

为了解释,我将共享数组的前5行,并显示我的数据帧。伊斯坦布尔数据帧距离矩阵

";伊斯坦布尔;数据帧有47行。我想将它们添加到";伊斯坦布尔;通过查看distance _ matrix中第i行中的所有值并将小于1的值相加。我的意思是,如果我们看distance _ matrix照片中的第一行,我想把数字加起来,比如0.21218192+0.1845819+0.54545613……并把它们放在伊斯坦布尔数据帧第I行的"地址"列中。

我的意图是循环遍历distance _ matrix并找到一些小于1的值。代码花费的时间太长。我怎样才能用更快的方法做到这一点?

我想你的意思是:

import numpy as np
# Set up some dummy data in range 0..100
distance = np.random.rand(47,1328624) * 100.0
# Boolean mask of all values < 1
mLessThan1 = distance<1
# Sum elements <1 across rows 
result = np.sum(distance*mLessThan1, axis=1)

这在我的Mac上需要168毫秒。

In [47]: %timeit res = np.sum(distance*mLessThan1, axis=1)
168 ms ± 914 µs per loop (mean ± std. dev. of 7 runs, 10 loops each)

最新更新