- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
这是我的问题,假设我有一个像这样的向量:
import numpy as np
idxx = np.array([0. , 0.07665982, 0.24366872, 0.49555099, 0.74743326,
1.07871321, 1.58247775, 2.24503765, 2.58179329, 3.16221766,
3.74811773, 4.1615332 , 4.58042437, 5.33059548])
我有兴趣仅过滤掉那些大约 0.25
、0.5
和 1.0
倍数的值。让我们从 0.25
开始,演示我希望过滤器返回的内容:
np.array([0.24366872, 0.49555099, 0.74743326,
1.07871321, 1.58247775, 2.24503765, 2.58179329,
3.74811773, 4.58042437, 5.33059548])
此处仅保留大约为 0.25
倍数的值。实际上,我还需要保留第一个条目 0.0
,但在本演示中已将其删除。
如果我使用 0.5
那么我的结果将如下所示:
np.array([0.49555099, 1.07871321, 1.58247775, 2.58179329, 4.58042437])
我最初的尝试是:
import math
for i in idxx:
g = 0.25
k = i % g
if math.isclose(k, g, rel_tol=0.5):
print('This is reasonably close: ', i, '\n\t for modulus k == ', k, '\n')
仍然需要我做大量的调整(而且我仍然无法过滤出我想要的东西),所以我想知道是否有人有更好的方法来正确地做到这一点?
本质上,我想选择那些不规则的点(例如0.24366872)到“规则”间隔的网格(例如0.25的间距)上,但是规则间隔的网格上的每个点都有一定的容差,例如+/- 0.05,以适应实际数据中的不规则性。因此,我可以在这些规则间隔的点处找到位于该公差范围内的点。
最佳答案
你可能会稍微倒退一下。不要试图找到有效的容差(1.07871321
确实会导致问题,不是吗),只需找到最接近网格点的点即可。
这是一种非常浪费内存的非循环方法,因为它创建了一个完整的 idxx.size
-by-n
数组,其中 n
是网格的大小:
def grid_filter(idxx, spacing):
# use idxx[0] instead of idxx.min() if idxx is sorted
g0 = np.floor(idxx.min() / spacing) * spacing
# use idxx[-1] instead of idxx.max() if idxx is sorted
g1 = np.ceil(idxx.max() / spacing) * spacing
# turn the grid into a column vector for broadcasting
n = np.round((g1 - g0) / spacing) + 1
grid = np.linspace(g0, g1, n).reshape(-1, 1)
# compute the absolute distance to each point and
# get the index of the point nearest each grid point:
# rows are grid points, columns data points
indices = np.abs(grid - idxx).argmin(axis=1)
# post-process to ensure that a data point only matches one grid point
indices = np.unique(indices)
# apply the result
return idxx[indices]
浪费的数组是grid - idxx
。这可能不会成为问题。 grid_filter(idxx, 0.25)
的结果是:
[ 0. 0.24366872 0.49555099 0.74743326 1.07871321 1.58247775 2.24503765 2.58179329 3.16221766 3.74811773 4.1615332 4.58042437 5.33059548]
如果您对 3.16
和 4.16
进入结果不满意,您可以将容差设置为 spacing
的 1/3 或其他值类似并与之合作:
def tolerance_filter(idxx, spacing, tolerance):
deltas = (idxx % spacing)
deltas = np.minimum(deltas, spacing - deltas)
candidates = deltas < tolerance * spacing
return idxx[candidates]
这个解决方案实际上可以满足您的需求,并且是完全矢量化的。 tolerance_filter(idxx, 0.25, 0.33)
返回
[ 0. 0.07665982 0.24366872 0.49555099 0.74743326 1.07871321 1.58247775 2.24503765 2.58179329 3.74811773 4.58042437 5.33059548]
为了进一步摆脱0.07665982
,我建议结合使用这些方法:首先过滤以获得最接近每个网格点的元素,然后过滤绝对容差:
tolerance_filter(grid_filter(idxx, 0.25), 0.25, 0.33)
此时您可以做得更好:首先将每个数组元素附加到最近的网格点,如第一部分所示。然后做一些适应性的事情。例如,获取残差的标准差,并丢弃高于标称值 3-sigma 的任何值:
def sigma_filter(idxx, spacing, nsigma):
deltas = (idxx % spacing)
deltas[deltas > 0.5 * spacing] -= spacing
sigma = np.std(deltas)
candidates = (np.abs(deltas) <= nsigma * sigma)
return idxx[candidates]
关于python - 从不规则间隔的向量中选择近似规则的样本,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52511722/
所以我必须用以下方法来近似 Pi:4*(1-1/3+1/5-1/7+1/9-...)。它也应该基于迭代次数。所以函数应该是这样的: >>> piApprox(1) 4.0 >>> piApprox(1
输入:图 G 输出:多个独立集,使得一个节点对所有独立集的成员资格是唯一的。因此,节点与它自己的集合中的任何节点都没有连接。这是一个示例路径。 由于这里需要澄清,因此再次改写: 将给定的图划分为多个集
我已经使用查找表和低阶多项式近似实现了定点 log2 函数,但对整个 32 位定点范围 [-1,+1) 的准确度不太满意。输入格式为 s0.31,输出格式为 s15.16。 我在这里发布这个问题,以便
大多数拥有CS学位的人当然会知道Big O stands for是什么。 它可以帮助我们评估算法的可扩展性。 但是我很好奇,您如何计算或估算算法的复杂性? 最佳答案 我会尽力在这里简单地解释它,但要注
我的目标是近似二项式变量总和的分布。我使用以下纸张The Distribution of a Sum of Binomial Random Variables作者:肯·巴特勒和迈克尔·斯蒂芬斯。 我想
我知道有方法 approximate cubic Bezier curves ( this page 也是一个很好的引用),但是有没有更快的方法来逼近 N 次贝塞尔曲线?还是只能使用下面的概括? 来自
大多数拥有CS学位的人当然会知道Big O stands for是什么。 它有助于我们评估算法的可扩展性。 但是我很好奇,您如何计算或估算算法的复杂性? 最佳答案 我会尽力在这里简单地解释它,但要注意
我是 C++ 和编码本身的初学者,所以请原谅任何词汇错误。我找不到这个具体问题,但在互联网上找到了类似的问题,但我仍然很难获得我需要的结果。 所以我使用莱布尼茨公式来近似 pi,即: pi = 4 ·
有多种方法可以通过显示名称查找联系人。例如这个答案Android - Find a contact by display name 但是我需要找到模糊匹配的联系人。例如如果找不到“Kim”,我需要返回
我一直在尝试使用以下代码使用级数表示来近似 e 以获得尽可能多的精度数字,但无论我计算多少项,精度数字的数量似乎都保持不变。即: 2.718281984329223632812500000000000
大多数拥有CS学位的人当然会知道Big O stands for是什么。 它可以帮助我们评估算法的可扩展性。 但是我很好奇,您如何计算或估算算法的复杂性? 最佳答案 我会尽力在这里简单地解释它,但要注
大多数拥有CS学位的人当然会知道Big O stands for是什么。 它可以帮助我们评估算法的可扩展性。 但是我很好奇,您如何计算或估算算法的复杂性? 最佳答案 我会尽力在这里简单地解释它,但要注
大多数拥有计算机科学学位的人肯定知道什么是Big O stands for。 它有助于我们衡量一个算法的实际效率,如果您知道在what category the problem you are try
大多数拥有计算机科学学位的人肯定知道什么是Big O stands for。 它有助于我们衡量一个算法的实际效率,如果您知道在what category the problem you are try
我做了很多随机的数学程序来帮助我完成作业(合成除法是最有趣的),现在我想反转一个激进的表达式。 例如,在我方便的 TI 计算器中我得到 .2360679775 好吧,我想将该数字转换为等效的无理数表达
我可以通过 CPU 分析器看到,compute_variances() 是我项目的瓶颈。 % cumulative self self total
大多数拥有 CS 学位的人肯定知道什么 Big O stands for . 它帮助我们衡量算法的可扩展性。 但我很好奇,你如何计算或近似算法的复杂性? 最佳答案 我会尽我所能用简单的术语在这里解释它
这是迄今为止我的代码, from math import * def main(): sides = eval(input("Enter the number of sides:"))
关闭。这个问题是not reproducible or was caused by typos .它目前不接受答案。 这个问题是由于错别字或无法再重现的问题引起的。虽然类似的问题可能是on-topi
大多数拥有 CS 学位的人肯定知道什么 Big O stands for . 它帮助我们衡量算法的扩展性。 但我很好奇,你如何计算或近似算法的复杂性? 最佳答案 我会尽我所能用简单的术语在这里解释它,
我是一名优秀的程序员,十分优秀!