【问题标题】:Equation relating the specific index of a value in an array and the size of the array MatLab将数组中值的特定索引与数组大小相关联的方程 MatLab
【发布时间】:2018-07-19 05:42:17
【问题描述】:

我正在尝试提出一个方程式,将 3D 数组中的值的索引与同一数组的索引相关联,但重新整形为列向量。

考虑以下内容。

A = randi([1,10],3,2,2);
A2 = reshape(A,3*2*2,1);

AA2 具有相同数量的元素,但每个数组的元素排列方式不同。如果我在这里为AA2 列出一个可能的例子,那么每个索引的几何排列方式就很清楚了。

A(:,:,1) = [9 10; 10 7;  2  1]
A(:,:,2) = [3 10;  6 2; 10 10]

A2 = [9; 10; 2; 10; 7; 1; 3; 6; 10; 10; 2; 10]

假设n=1:1:3*2*2,这是一个与A2 长度相同的数组,并对每个元素进行编号。 A(2,2,2)=2 的值和索引 [i,j,k]=[2,2,2]。我想要一个关于 i、j、k 和 n 的方程。

我查看了内置函数 ind2subsub2ind,但似乎我无意中塑造了我的 i、j 和 k 坐标(对应于实际的 x、y 和 z 点)与MatLab 是怎么做的。这让我现在很难改变一切,这也是我需要一个方程式的原因。

【问题讨论】:

  • 谢谢,我的意思是 12x1,我会纠正这个。
  • @Wolfie 我解释了我对坐标的意思,你到底不明白什么?我认为这与回答问题没有任何关系。
  • 我只是想建议您一些最佳实践...如果您按照惯例行事,那么听起来ind2subsub2ind 将是您的答案,不是吗?您可以通过从一维向量开始并使用等于索引的值而不是随机数来轻松地对其进行逆向工程。
  • 不,因为我没有时间这样做。
  • @WnGatRC456 请澄清您的具体问题或添加其他详细信息以准确突出您的需求。正如目前所写的那样,很难准确地说出你在问什么。

标签: arrays matlab


【解决方案1】:

3D 索引和线性 (1D) 索引之间的转换由下式给出:

n=i+(j-1)*M + (k-1)*M*N

逆向可以递归得到:

k = floor((n-1)/(M*N)) +1 
n = n - (k-1)*M*N
j = floor((n-1)/M) + 1
i = n - (j-1)*M 

我还没有测试过,但我认为它会给你你所期望的。

【讨论】:

  • 第一部分效果很好。我测试了第二部分,它似乎不起作用。由于我不使用随机数组,并且我知道每个元素的确切值,并且它们不会重复,因此如果我只知道 n 的话,我可以找到 i、j 和 k。但如果不是这种情况,最好有更通用的东西。我想我现在可以接受你的回答了。但是,如果您有时间弄清楚下半场,那就太好了。
  • 这正是sub2indind2sub 计算的内容。
  • @CrisLuengo 正如我上面所说,我不知道为什么当我在我的机器上使用sub2indind2sub 时为什么会收到不同的结果。我的印象是,这是由于我设置阵列的方式,因为我过去在其他情况下处理过这个问题。
  • 其实这并不完全一样,因为它是错误的……在第二个代码块的顶部缺少一个n=n-1。计算假设基于 0 的线性索引。
  • 对于我对 sub2indind2sub 工作方式的误解造成的混乱,我深表歉意。我想我现在理解得更好了,这对将来会有所帮助。
猜你喜欢
  • 1970-01-01
  • 2022-12-03
  • 2017-03-28
  • 2012-02-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多