在Python中单独的数组相等时,将变量设置为彼此相等

时间:2018-07-20 19:36:10

标签: python arrays matlab data-manipulation

我想知道在Python中是否有一种方法可以像在Matlab中那样在一行中的其他数组相同时(或以一种有效的方式)将两个数组设置为彼此相等。

例如,假设我有两个温度数组和两个相应纬度数组,如下所示。我想用纬度相同的第二个数组(temps2)中的温度替换第一个数组(temps1)中的温度。 (间隔只是为了清楚起见显示哪些值对应于哪些点)

temps1 = [20, 23, 24, 20, 25, 36, 21, 10, 32, 27]
temps2 = [        25, 21,         22, 09]

lats1  = [45, 46, 47, 48, 49, 50, 51, 52, 52, 53] 
lats2  = [        47, 48,         51, 52]

我在Matlab中知道,只需说

即可轻松完成
temps1(lats1 == lats2) = temps2;

在python中有没有一种方法可以不通过for循环来做到这一点?在我的实际项目中,我需要处理大量数据,并且如果可能的话,我希望效率更高。预先感谢!

2 个答案:

答案 0 :(得分:0)

在这种情况下,我建议使用numpy库。这是一个非常流行的Python数字库,其功能与Matlab数组非常相似。

在其中,您将从当前数组创建np数组:

temps1 = np.array(temps1)

然后,您可以按照我的意思做,

temps1[lats1 == lats2] = temp2[lats1 == lats2]

编辑:如果数组彼此不直接对应且形状不相等,则无法按原样工作。需要更复杂的查询,但需要更多信息才能构建该查询。

答案 1 :(得分:0)

这应该可以利用freepd.Series()来达到目的:

numpy

这要求temps1.update(lats1.map(dict(zip(lats2,temps2))).dropna()) temps1均为lats1。重播为列表:

pd.Series()

收益:

temps1.tolist()

请注意,此解决方案将[20, 23, 25, 21, 25, 36, 22, 9, 9, 27] 中的所有值替换为temps1temps2之间存在匹配值的lats1中的值。因此,lats2的两次出现都将被替换。