【问题标题】:Setting variables equal to each other when separate arrays are equal in Python当 Python 中的单独数组相等时,将变量设置为彼此相等
【发布时间】:2025-11-29 07:50:02
【问题描述】:

我想知道当其他数组在一行中(或以一种有效的方式)相同时,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 循环的情况下做到这一点?在我的实际项目中,我有很多数据要处理,如果可能的话,我希望效率更高。提前致谢!

【问题讨论】:

  • 澄清一下,temps1temps2 的列表长度是否相同?
  • 不,它们的大小和形状不同。
  • 是什么让您认为temps1(lats1 == lats2) = temps2; 会在Matlab 中工作? lats1lats2 没有兼容的形状。 Matlab 不会像您想要的那样为您排列元素。

标签: python arrays matlab data-manipulation


【解决方案1】:

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

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

temps1 = np.array(temps1)

那么,你可以按照我的意思去做,

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

编辑:如果数组不直接对应并且形状不相等,那么这将无法正常工作。将需要更复杂的查询,但需要更多信息来构建它。

【讨论】:

    【解决方案2】:

    这应该可以解决问题,同时使用pd.Series()numpy

    temps1.update(lats1.map(dict(zip(lats2,temps2))).dropna())
    

    这要求temps1lats1 都是pd.Series()。重铸为列表:

    temps1.tolist()
    

    产量:

    [20, 23, 25, 21, 25, 36, 22, 9, 9, 27]
    

    请注意,此解决方案会将temps1 中的所有值替换为temps2 中的值,其中lats1lats2 之间存在匹配值。因此,52 的两次出现都将成为替换的候选对象。

    【讨论】:

      最近更新 更多