我想知道在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循环来做到这一点?在我的实际项目中,我需要处理大量数据,并且如果可能的话,我希望效率更高。预先感谢!
答案 0 :(得分:0)
在这种情况下,我建议使用numpy
库。这是一个非常流行的Python数字库,其功能与Matlab数组非常相似。
在其中,您将从当前数组创建np
数组:
temps1 = np.array(temps1)
然后,您可以按照我的意思做,
temps1[lats1 == lats2] = temp2[lats1 == lats2]
编辑:如果数组彼此不直接对应且形状不相等,则无法按原样工作。需要更复杂的查询,但需要更多信息才能构建该查询。
答案 1 :(得分:0)
这应该可以利用free
和pd.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]
中的所有值替换为temps1
和temps2
之间存在匹配值的lats1
中的值。因此,lats2
的两次出现都将被替换。