python - 使用 2 个数组在 numpy 中填充第三个数组
问题描述
我正在尝试在 python 中以某种方式处理两个数组。让我们说
A = np.array([5, 10, 30, 50])
B = np.array([2, 3, 4, 5])
现在我有一个目标数组C = [2, 7, 15, 25, 40]
。我想为(say Y
)中的每个元素找到一个输出值( C
say x
),条件是:
- 如果
x < A[0]
那时Y = B[0]
- 如果
A[i] < x < 2*A[i] < A[i+1]
或A[i] < x < A[i+1] < 2*A[i]
然后Y=x
- 如果
A[i] < 2*A[i] < x < A[i+1]
那时Y = B[i+1]
- 如果
x > A[end]
那时Y = x
i
是满足条件的最大可能索引
所以,输出变成Y = [2, 7, 15, 4, 40]
这是我目前拥有的
A = np.array([5, 10, 30, 50])
B = np.array([2, 3, 4, 5])
C = np.array([2, 7, 15, 25, 40])
diffA = np.diff(A)
diffIdx = np.squeeze(np.where(diffA > A[0:len(A)-1]+1e-6))
Y = np.array([])
for x in C:
idx = np.searchsorted(A, x)
if idx == 0:
Y = np.append(Y, B[0])
elif np.any(diffIdx==idx-1) & (x>2*A[idx-1]+1e-6):
Y = np.append(Y, B[idx])
else:
Y = np.append(Y, x)
这似乎有效,IPython 控制台%timeit
显示它需要24.7 ms
,但我想知道是否有更好或更快的方法来做同样的事情。
解决方案
检查这个问题最有效的方法来映射函数到 numpy array
。您可以创建一个索引数组,创建一个np.arange(C.size)
包含所有组合逻辑的函数A
,B
并C
通过索引获取它们的元素,并根据数组的大小选择最快的方法来应用该函数。
推荐阅读
- javascript - 离线优先 webapp 本地存储同步到 MySQL
- javascript - jquery 或 javascript 中有没有一种方法可以在不使用 ajax 请求的情况下在页面加载时填充下拉列表?
- javascript - 如何在通过 loadsh.js 绑定时在 html 输入标签中插入 JSON 字符串
- c++ - 无法将 const 数据类型传递给非 const 函数
- python-3.x - Python3 中的字节、字符串和 urllib
- javascript - onEdit 单元格 - 该脚本在编辑所有表格中的单元格 B4 时有效
- android - 如何为 Android 构建 LibVLC
- r - 如何修复警告“警告消息:在 nloptr(x0 = x0, eval_f = f,..... NAs 强制引入整数范围”
- java - 如何按多个属性在java8对象列表中排序
- javascript - 在函数/承诺范围之外使用对象