在Python中循环二维数组的最佳有效方法是什么

在Python中循环二维数组的最佳有效方法是什么,python,arrays,loops,multidimensional-array,Python,Arrays,Loops,Multidimensional Array,我不熟悉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,

我不熟悉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)
distance_matrix=[[0.21218192,0.12845819,0.54545613,0.92464129,0.12051526,0.0870853],[0.2168166,0.11174682,0.58193855,0.93949729,0.080606061,0.11963891],[0.23996969999,0.17554854,0.60834333,0.93914766,0.11631545,0.2036373]]
iskeller=pd.DataFrame({
“lat”:[40.992752,41.083202,41.173462],
‘lon’:[29.023165,29.066652,29.088163],
“姓名”:[“卡德克伊”、“阿纳多卢希萨”、“阿纳多卢卡瓦”]
},dtype=str)
对于范围内的i(len(距离矩阵)):
对于范围内的j(len(距离矩阵[0]):
如果距离矩阵[i][j]<1:
iskeller.loc[i,'Address']=距离矩阵[i][j]
打印(Iskeller)
为了解释,我正在共享数组的前5行并显示数据帧。

“İskeleler”数据帧有47行。我想通过查看距离矩阵中第一行中的所有值并添加小于1的值,将它们添加到“İskeleler”中第一行的“Address”列中。我的意思是,如果我们看距离矩阵照片中的第一行,我想加上像0.21218192+0.12845819+0.54545613这样的数字。。。。并将它们放在İskeleler数据框第i行的“地址”列中

我的目的是循环通过距离矩阵,找到一些小于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)

请检查:使用numpy?你已经导入了。您还想给我们一些实际运行的代码。IMHO在第2、3和4行中使用未初始化的
距离矩阵
,在第5和7行中使用
Iskeller
,给出了error@ThomasWeller事实上,我分享了我的代码,所以你可以理解它。因为我从互联网上提取了两个阵列。如果我和你分享我初始化的部分,那将是一篇很长的文章。我问的问题实际上是一个理论问题。通过将两个for循环放在彼此内部进行计算,需要花费大量时间。我甚至不能看到它工作,因为我的数组太大了(这就是为什么我分享它的形状)。没有两个循环我怎么办,实际上这是我的问题。你想把
iskeller.loc
设置为
distance\u matrix
每行的最后一个元素小于1吗?@MarkSetchell我编辑了我的帖子来回答你的问题。非常感谢。它很好用。对不起,我告诉你的时间太长了。我不是以英语为母语的人,我只是开始习惯python。没问题-祝你的项目好运!避免使用大型Numpy数组进行
循环。如果你被卡住了,回来问另一个问题——问题(和答案)是免费的
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)