- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
这是 C 语言。
我有两个二维数组,ArrayA 和 ArrayB,它们对同一空间进行采样。 B 对与 ArrayA 不同的属性进行采样的频率低于 ArrayA,因此它比 A 小。
只是尝试定义一些变量:ArrayA:SizeAX by SizeAY,通过位置 posAX、posAY 的索引 A 进行索引ArrayB:SizeBX by SizeAY,通过indexB索引位置posBX,posBY
ArrayA 和 ArrayB 是指向数组开头的指针,首先存储 X 的行,然后递增 Y,最后存储 X 的下一行(Y=1)
因此,我需要根据给定的索引A设置索引B,使其成为最近邻样本,以与索引A的值关联。
这是我所在的位置(请更正任何错误!请注意,我从索引 0 开始):如果 ArrayA 为 9x9,ArrayB 为 3x3:(位置X,位置Y)位置 0,0;索引A = 0posB 0,0;索引B = 0
posA 8,0; indexA = 8(第一行末尾)位置 B 2,0;索引B = 2
posA 0,1;索引A = 9posB 0,0; indexB = 0(仍然接近底部点)
posA 0,3;索引A = 27位置 B 0,1;索引B = 3
posA 8,8;索引A = 80(最后一点)位置B 2,2;索引B = 8
到目前为止我有:索引A = posAX + (posAY * SizeAX)
我尝试过的(当然失败了):indexB = (int) (indexA * (SizeBX * SizeBY/(SizeAX * SizeAY)) + 0.5)//似乎只适用于第一行和最后一个值..但这显然不起作用 - 但我很好奇它如何准确地将两者映射在一起,但我会在修复它后研究它..
我无法访问 posAY 或 posAX,只能访问 indexA,但我应该能够使用 mod 和余数将其分解,对吗?或者有更有效更快的方法吗?
我也尝试过这个:
indexB = (posAY * SizeBY/SizeAY) * SizeBY + (posAX * SizeBX/SizeAX)
我认为问题是我需要分别舍入 X 和 Y 索引,然后使用 SizeBX 和 SizeBY?
额外需要注意的是,ArrayA 和 ArrayB 来自更大的数据集,它们都采样更大的空间。由于矩形是任意的,ArrayA 或 ArrayB 都可能具有最接近矩形边界的点,从而导致最近邻居真正抓取的方式等其他问题。我也不知道如何解决这个问题。
最佳答案
这些是您选择的一些令人反感的名称,但至少它们被定义了。
我认为你想在 [0...1]x[0...1] 真实坐标空间中遍历 (x,y) ;也就是说,A 的右下角应该从 B 的右下角获取值,对于中左上角等也是如此。这意味着您应该将数组中点的外边缘视为 0 宽度点在 [0...1]x[0...1] 框边缘采样值;即,如果您有一个 3x3 数组,则有一个点位于 (0.5,0.5),其余点位于一条边上。
我假设你的 2d B 数组中有实际值,这样插值就有意义;因为数组的大小不同
这是从
开始的方案indexA -> (posAX,posAY) -> (x,y) -> (fracBX,fracBY) ->(通过最近邻插值)ArrayB 中的值
重要提示:(fracBX,fracBY) 是框 [0...SizeBX-1]x[0...SizeBY-1] 中的实值坐标。
让我们一步一步来。假设我理解你的意思,值在内存中的顺序是从左到右、从上到下(英文阅读),就像标准的 C 数组一样。然后:
unsigned posAX=indexA%SizeAX;
unsigned posAY=indexA/SizeAX;
现在,让我们映射到 (x,y):
double x=posAX/(SizeAX-1.0); // we get double division when we subtract by 1.0
double y=posAY/(SizeAY-1.0);
现在,到 (fracBX,fracBY),其中 0<=fracBX<=SizeBX 且 0<=fracBY<=SizeBY:
double fracBX=x*(SizeBX-1);
double fracBY=y*(SizeBY-1);
现在,在 B 数组中(最多 4 个)最近的积分点之间进行插值:
unsigned intBX=(unsigned)fracBX;
double aBX=fracBX-intBX;
unsigned intBY=(unsigned)fracBY;
double aBY=fracBY-intBY;
double *bv=ArrayB+(intBX*sizeBY)+intBY;
#define INTERP(alpha,v1,v2) ((1-alpha)*v1+alpha*v2)
#define INTERPI(alpha,i1,i2) (alpha>0 ? INTERP(alpha,bv[i1],bv[i2] : bv[i1])
double v0=INTERPI(aBX,0,1);
double value=fracBY>0 ? INTERP(aBY,v0,INTERPI(aBX,sizeBY,sizeBY+1)) : v0;
值(value)就是你的答案。需要检查小数位置 aBX 和 aBY 是否为 0,以防止访问超出数组末尾的值(即使通过乘以 0 来忽略这些值,这也可能导致段错误)。或者,您可以通过分配比您需要的多 1 行/列来简化事情。
bv[0] 是 ArrayB[intBX][intBY],bv[1] 是向右下一位,bv[sizeBY] 是向下一位,bv[sizeBY+1] 是向右向下一位。 (aBX,aBY) 是 [0...1]x[0...1] 中的另一个点,但这次以 ArrayB 中的四个相邻点为界。
关于c - 将 2D 数组的 1D 索引最近邻映射到更小的 2D 数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1930552/
我需要获取过去 24 小时的记录,但不能像这样按小时分组: SELECT HOUR(CompDate) AS hour, COUNT(1) AS action FROM mytable WHERE (
我们有一个自动完成列表,当您向某人发送电子邮件时会填充该列表,这一切都很好,直到列表变得非常大,您需要输入越来越多的地址才能找到您想要的地址, 这违背了自动完成的目的 我在想应该添加一些逻辑,以便自动
我在 android 的锁屏上工作我们如何禁用导航软按钮,已经尝试了所有方法,systemoverlay但它不起作用,在按下主页按钮时它会终止服务和 Activity 。 最佳答案 后退按钮可以通过覆
我有一个报告创建时间为 2016-05-30,现在我需要从报告时间开始的最后 7 天。我怎样才能使用时刻? report_create_time = moment('2016-05-30').form
我想找出向量中最接近的三个数字。 就像是 v = c(10,23,25,26,38,50) c = findClosest(v,3) c 23 25 26 我试过 sort(colSums(as.ma
考虑以下表结构: id speed 1 100 2 200 3 300 4 400 5 500 考虑以下查询:"SELECT * FROM records WHERE
我正在开发一个依赖 YouTube 直播和实时聊天(也来自 YouTube)的网络应用。事情进展顺利,突然嵌入的聊天功能无法在移动设备上运行。 我试图在我这边找到一个错误或一些无效的配置,但我找不到。
我正在制作一个 React Native 应用程序,它有一个安全部分,用户必须在其中输入密码才能解锁 protected 内容。问题是,当用户在锁定该部分之前切换到另一个应用程序时,将生成屏幕截图以及
我有一条 SQL 语句 (SQL Server Management Studio),我通过仪表板软件将数据传递到 where 语句中。用户可以选择年份(2013 年或现在的 2014 年)和月份(作
我有一个脚本可以添加一组行,使您能够在 SharePoint 列表表单中捕获其他访问者的信息。我有两个 anchor 标记,一个用于添加,另一个用于删除。当我添加一个新的访问者时它有效,当我删除访问者
我正在学习斯坦福 iOS 类(class),我有一个问题,我认为与最近的更新有关。这是代码部分: func evaluate(ops: [Op]) -> (result: Double?,remain
我注意到我的应用有一个奇怪的行为。每当我按下主页按钮时,我的应用程序就会被杀死。我没有在应用程序堆栈中看到该应用程序。我可以看到之前启动的其他应用程序。最初我怀疑 android:launchMode
我需要获取过去 7 天内的所有付费和临时条目,但我总是收到所有退回的内容。我不确定我做错了什么,我已经阅读了这里的很多帖子,但无法理解它是什么。 MySQL 5.6(如果它与我一直在做的事情有什么不同
我的表有一列以 mysql time() 格式格式化。 当它是一个值分配给名为 $preRemainOt 的 php 变量时我想重新安排到最近的 15 分钟 function roundTime($w
我想获取过去 7 天内每天每个产品的最后时间戳。数据库中有数千条记录。我怎样才能通过查询来做到这一点。大约有 25 种不同的产品,每种产品每天大约有 50 个时间戳。 表:构建数据 'Timesta
我现在的代码正在从 SQL 中获取移动应用程序中的数据,首先添加显示,我需要将其设置为在我的 Android 应用程序中显示最后添加的第一个。我有如下所示的 api 代码,最新的是根据我的要求显示的,
我有一张 table ,说 table 的描述为: | ID | SNO | c1 | c2 | c3 | ___________________________________ |
我有两个大小相等的向量,例如 A=[2.29 2.56 2.77 2.90 2.05] and B=[2.34 2.62 2.67 2.44 2.52]. 我有兴趣在两个相同大小的向量 A 和 B 中
之前,我在这里发布了一个问题,询问有关如何从驱动器读取和写入数据的建议,而不是通过像“aaa.txt”这样的文件标签,而只是扇区..我被建议尝试阅读和写作....但新问题出现了……毛茸茸的参数 int
我想删除在给定时间段内未登录的用户,但我稍后会根据结果选择时间段。 所以我需要报告,其中我将收到过去 1 个月、2 个月...... n 个月内未登录的用户数量。 我不太清楚如何在单个 mysql 查
我是一名优秀的程序员,十分优秀!