【发布时间】:2019-10-31 11:12:45
【问题描述】:
考虑两个不同长度的数组:
A = np.array([58, 22, 86, 37, 64])
B = np.array([105, 212, 5, 311, 253, 419, 123, 461, 256, 464])
对于A 中的每个值,我想找到A 和B 中的值之间的最小绝对差。我使用 Pandas 是因为我的实际数组是 Pandas 数据帧的子集,还因为 apply 方法是一种方便(尽管速度很慢)的方法来区分两个不同大小的数组:
In [22]: pd.Series(A).apply(lambda x: np.min(np.abs(x-B)))
Out[22]:
0 47
1 17
2 19
3 32
4 41
dtype: int64
但是我也想保留这个标志,所以想要的输出是:
0 -47
1 17
2 -19
3 32
4 -41
dtype: int64
[更新] 我的实际数组 A 和 B 的长度大约为 5e4 和 1e6,因此低内存解决方案将是理想的。另外,我希望避免使用 Pandas,因为它在实际数组上非常慢。
【问题讨论】:
-
如果你在处理 NumPy 数组,pandas 是从哪里来的?
-
@cs95 你是对的,不需要熊猫。我忘记了 NumPy 的广播,所以不知道如何在不使用 Pandas 和
apply方法的情况下减去不同大小的数组。 -
您能否有两个输出列:一个用于
absdiff(然后您可以轻松地对其进行最小化),另一个用于sign?或者你只需要广播一个min_abs_diff_preserve_signpandas/numpy 函数吗? -
“我使用 Pandas 是因为我的实际数组是 Pandas 数据帧的子集” 如果它们是
pandas Series而不是numpy arrays,请编辑标题以说明这一点。
标签: python pandas numpy difference