python - 搜索两个 3 列 numpy 数组并在 Python 中找到符合条件的位置
问题描述
我有两个像
Population A
Score A Score B Answer
1 0.3 1
0 0.5 0
1 0.6 1
0 0.7 1
1 0.9 1
Population B
Score A Score B Answer
1 0.3 1
0 0.5 0
1 0.6 1
1 0.7 1
0 0.9 1
Sample Results are
ScoreB Ratio
0.3 1
0.5 1
0.6 1
0.7 1
我必须在每个总体中找到分数 B 的分数/值,高于该值的任何值都变为 1,否则为 0,例如,如果您在总体 A 中选择 0.5,则第一个值为 0,其余为 1,同样,如果您在总体 B 中选择 0.6例如,前两个值为 0,其余为 1。
我猜我必须在while循环中迭代地/算法地执行此操作,并且不创建或替换 scoreB 这样
Ratio = (counts(scoreA=1&scoreb=1&Answer=1) in population A/ counts(scoreA=1&scoreb=1&Answer=1) in population B) == 1
注意:分数 B 已排序,因此不必担心
解决方案
您可以使用logical_and或简单地使用*
numpy 数组上的运算符,它给出了元素明智的乘法
import numpy as np
def count_match (v, A, B, C):
cond = np.logical_and(A == 1, B >= v)
cond = np.logical_and(cond, C == 1)
# alternatively, use an element wise product:
cond = (A == 1) * (B >= v) * (C == 1)
# counting the number of 1
count = np.sum(cond)
return count
A_a = np.array([1, 0, 1, 0, 1])
B_a = np.array([0.3, 0.5, 0.6, 0.7, 0.9])
C_a = np.array([1, 0, 1, 1, 1])
A_b = np.array([1, 0, 1, 1, 0])
B_b = np.array([0.3, 0.5, 0.6, 0.7, 0.9])
C_b = np.array([1, 0, 1, 1, 1])
for v in [0.3, 0.5, 0.6, 0.7, 0.9]:
print(v, count_match(v, A_a, B_a, C_a) / count_match(v, A_b, B_b, C_b)) # divides by zero brr
请注意,对于 popA 和 popB,数组 A 和 C 上的条件不会改变,因此您可能已经预先计算它们(我怀疑它会改变那么多时间)
def count_match2(v, pre_cond, B):
return np.sum(pre_cond * (B >= v))
for v in [0.3, 0.5, 0.6, 0.7, 0.9]:
print(v, count_match2(v, (A_a == 1) * (C_a == 1), B_a) / count_match2(v, (A_b == 1) * (C_b == 1), B_b)) # divides by zero brr
推荐阅读
- java - 错误错误:找不到符号类毕加索
- android - Android Things 项目状态:从哪里获取信息?
- .htaccess - 如何使用 mod_rewrite 重写本地域?
- vba - 在 Word 中将项目符号转换为列表项
- java - 需要帮助解决 FileOutputStream 和 DataOutputStream 上的 IOexception
- php - iframe 中的 laravel 应用程序不断刷新会话
- java - 在可跨字符串中搜索时,如何忽略要突出显示的字符的大小写?
- ios - swift: 为 UDP 调用 receiveMessage(completion:) 时出现问题
- literals - 像“2 * 7”这样的操作是否被视为文字?
- powershell - 如何从计算机 OU 中动态移动计算机帐户