【发布时间】:2016-12-24 07:03:36
【问题描述】:
我猜有一种快速的方法可以做到这一点。我有 3 个相同大小的数组,它们代表 x、y、z 的坐标,例如:
In[85]: xxn
Out[85]:
array([ 0.08333333, 0.08333333, 0.08333333, 0.08333333, 0.08333333,
0.08333333, 0.08333333, 0.08333333, 0.08333333, 0.25 ,
0.25 , 0.25 , 0.25 , 0.25 , 0.25 ,
0.25 , 0.25 , 0.25 , 0.5 , 0.5 ,
0.5 , 0.5 , 0.5 , 0.5 , 0.5 ,
0.5 , 0.5 , 1. , 1. , 1. ,
1. , 1. , 1. , 1. , 1. ,
1. , 2. , 2. , 2. , 2. ,
2. , 2. , 2. , 2. , 2. ,
3. , 3. , 3. , 3. , 3. ,
3. , 3. , 3. , 3. , 4. ,
4. , 4. , 4. , 4. , 4. ,
4. , 4. , 4. , 5. , 5. ,
5. , 5. , 5. , 5. , 5. ,
5. , 5. ])
yyn
Out[86]:
array([ 1306.89 , 1524.705, 1742.52 , 1960.335, 2178.15 , 2395.965,
2613.78 , 2831.595, 3049.41 , 1306.89 , 1524.705, 1742.52 ,
1960.335, 2178.15 , 2395.965, 2613.78 , 2831.595, 3049.41 ,
1306.89 , 1524.705, 1742.52 , 1960.335, 2178.15 , 2395.965,
2613.78 , 2831.595, 3049.41 , 1306.89 , 1524.705, 1742.52 ,
1960.335, 2178.15 , 2395.965, 2613.78 , 2831.595, 3049.41 ,
1306.89 , 1524.705, 1742.52 , 1960.335, 2178.15 , 2395.965,
2613.78 , 2831.595, 3049.41 , 1306.89 , 1524.705, 1742.52 ,
1960.335, 2178.15 , 2395.965, 2613.78 , 2831.595, 3049.41 ,
1306.89 , 1524.705, 1742.52 , 1960.335, 2178.15 , 2395.965,
2613.78 , 2831.595, 3049.41 , 1306.89 , 1524.705, 1742.52 ,
1960.335, 2178.15 , 2395.965, 2613.78 , 2831.595, 3049.41 ])
In[87]: zzn
Out[87]:
array([ 0.4837052 , 0.3976288 , 0.3076519 , 0.2105963 , 0.1015546 ,
0.1162558 , 0.1723646 , 0.2173536 , 0.2547635 , 0.3767569 ,
0.3196527 , 0.2606447 , 0.1983554 , 0.1291423 , 0.09786849,
0.1277448 , 0.1560009 , 0.1802875 , 0.3420683 , 0.2938885 ,
0.2452067 , 0.1958042 , 0.144459 , 0.1026045 , 0.1086459 ,
0.1256328 , 0.1419562 , 0.3090272 , 0.2726449 , 0.236535 ,
0.200679 , 0.1647521 , 0.1310315 , 0.1132389 , 0.1129602 ,
0.118809 , 0.284265 , 0.257173 , 0.2310047 , 0.205817 ,
0.18154 , 0.1586908 , 0.1393701 , 0.1264879 , 0.1204383 ,
0.2760804 , 0.2540095 , 0.2330927 , 0.2133592 , 0.1947658 ,
0.1775263 , 0.1622754 , 0.1498286 , 0.1407699 , 0.274541 ,
0.2560495 , 0.2387175 , 0.222547 , 0.2075007 , 0.1936717 ,
0.1812974 , 0.1706293 , 0.1618527 , 0.2802191 , 0.2641784 ,
0.2491889 , 0.2352521 , 0.2223443 , 0.2105051 , 0.199825 ,
0.1903785 , 0.1822064 ])
我想找出根据 xxn 和 yyn 中的匹配位置获取 zzn 值的最快方法,例如 [1, 2395.965] 将返回 0.1310315,这是数组 zzn 中 [1, 2395.965] 的位置匹配位置.
在熊猫中我会做 zz[(xx == 1) & (yy == 2395.965)] = 0.1310315 但不幸的是它上面有一个巨大的循环,它会变慢。
感谢您的帮助!
编辑:
我当前的循环使用的是 pandas 等
for coordinate in df.itertuples():
sTL = zz[(xx == x_match) & (yy == y_match)].values
sBL = zz[(xx == x_match) & (yy == sB)].values
sTR = zz[(xx == sR) & (yy == y_match)].values
sBR = zz[(xx == sR) & (yy == sB)].values
其中坐标是 x_match、y_match、sR、sB 值,有 100k 行
【问题讨论】:
-
我认为您也不需要循环数组。你是如何循环实现它的?
-
这是一个自定义插值,我在一个循环中使用不同的 xxn 和 yyn 坐标提供多个 xxn yyn 和 zzn,我需要 zzn 等效项
-
你能分享一个示例数据的循环实现吗?
-
@divakar 在主帖问题中添加了一个示例
-
这可能会有所帮助 - stackoverflow.com/questions/38674027/…
标签: python-2.7 pandas numpy