首页 > 解决方案 > numpy - 将 2 个向量与可能缺失的值对齐

问题描述

我有 2 个对齐方式略有不同的 numpy 矩阵

X

    id,  value
     1,   0.78
     2,   0.65
     3,   0.77
       ...
       ...
    98,   0.88
    99,   0.77
   100,   0.87

    id,  value
     1,   0.79
     2,   0.65
     3,   0.78
       ...
       ...
    98,   0.89
   100,   0.80

Y 只是缺少一个特定的 ID。我想对 X 和 Y 执行矢量运算(例如相关性、差异性......等)。这意味着我需要在 X 中删除相应的缺失值。我该怎么做?

标签: pythonnumpy

解决方案


所有的值都是相同的,所以额外的元素x将是总和之间的差。

这个解决方案是o(n),这里的其他解决方案是o(n^2)

数据生成:

import numpy as np

# x = np.arange(10)
x = np.random.rand(10)
y = np.r_[x[:6], x[7:]]  # exclude 6
print(x)
np.random.shuffle(y)
print(y)

解决方案:

注意np.isclose()用于浮点比较

sum_x = np.sum(x)
sum_y = np.sum(y)
diff = sum_x - sum_y
value_index = np.argwhere(np.isclose(x, diff))

print(value_index)

删除相关索引

deleted = np.delete(x, value_index)
print(deleted)

出去:

[0.36373441 0.5030346  0.895204   0.03352821 0.20693263 0.28651572
 0.25859596 0.97969841 0.77368822 0.80105397]
[0.97969841 0.77368822 0.28651572 0.36373441 0.5030346  0.895204
 0.03352821 0.80105397 0.20693263]
[[6]]
[0.36373441 0.5030346  0.895204   0.03352821 0.20693263 0.28651572
 0.97969841 0.77368822 0.80105397]

推荐阅读