基本上,我要问的是给定一个正方形2D阵列和一个有效的补丁大小(2D子阵列的大小),我将如何做到这一点。最终,我不需要以任何方式存储子阵列,我只需要找到每个子阵列的中值并将它们存储在一个一维阵列中。中值和存储到新阵列对我来说很简单,我只是不知道如何处理原始2D阵列并正确拆分它。我已经尝试了几次,但一直出现越界错误。我有一个4x4:
[1,2,3,4] [2,3,4,1] [3,4,1,2]
我需要像这样拆分它
< code>[1,2] [3,4] [2,3] [4,1]
<代码>[3,4][1,2][4,1][2,3]
然后取每个的中位数并将它们存储到一个新的1D数组中。
编辑:解决了,感谢您的帮助!
我想像这样的东西可以做,虽然我没有测试它,但它应该会让你对如何进行扫描有一个很好的想法
public int[] patchArray(int[][] img, int patch)
{
int size = img.length * (img[0].length / patch) ;
int[] pArray = new int[size];
int[] tmp = new int[patch];
for (int row_i = 0; row_i < img.length; row_i++)
{
for (int patch_start = 0; patch_start < img[i].length; patch_start += patch)
{
int x = 0;
for (int patch_i = patch_start; patch_i < (patch_start + patch); patch_i++)
{
tmp[patch_i - patch_start] = img[row_i][patch_i];
}
calculateMedian(tmp);
}
}
return pArray;
}
您可以使用< code > arrays . copy of range(Object[]src,int from,int to)进行此操作,其中:
src
是源1D
array
< code>from是要复制的范围的初始索引。
到
是要复制的范围的最终索引,不包括在内。
我不喜欢你的代码,因为它的时间复杂度太高了。
试试下面的代码:
public class Temp {
public static void main(String[] args) {
int[][] arr = { { 1,2,3,4 },
{ 2,3,4,1 },
{ 3,4,1,2 },
{ 4,1,2,3 } };
int patch = 2;
splitToSubArrays(arr, patch);
}
static void splitToSubArrays(int arr[][], int patch) {
for (int i = 0; i < arr[0].length; i++) {
int to = patch;
for (int from = 0; to <= arr.length;) {
int a[] = Arrays.copyOfRange(arr[i], from, to);
// instead of printing you can store in a separate array for later usage
System.out.println(Arrays.toString(a));
to += patch;
from += patch;
}
}
}
}
编辑:注意:对于N*N
数组,如果N%patch值整除,那么如果
condition here
来控制索引绑定。希望你知道这一点。
输出
[1, 2]
[3, 4]
[2, 3]
[4, 1]
[3, 4]
[1, 2]
[4, 1]
[2, 3]
我有一个由图像像素组成的2D数组,其大小取决于输入图像的大小。我需要将其分解为更小的9x9数组。为了给出更清晰的图片,我尝试说明情况: //smallerArray的行数和列数如下:它应该从imagePixels数组中复制它们,每8列迭代一次,然后再移动到下8行。 我已经完成了以下代码,但无法正确理解我的逻辑。如何停止迭代: 向上复制到第9列或第9行,将其存储在数组中,继续复制到第10列/第10行
我有一个子阵列: 我想将每个子数组的元素放入另一个数组中,但子数组大小的总和必须小于或等于6。所以我想得到这样的东西 我现在的代码是 我被困在这里,因为我的代码只有两个前元素。原始数组有大约1000个子数组,我的代码没有以那种形式分割它。
问题内容: 我想输出二维数组的最大值和最小值。Max可以很好地工作,但是即使在数组中没有零的情况下min也总是输出零。在本例中,我设置为99以防止较小的机会在数组中获得零。继承人完整代码: 问题答案: 由于您在中选择随机值的方式,不会存在小于零的值- 但也无法保证任何值都将恰好为零。但是,您将初始化为零,因为这是数组元素的默认值;没有什么比这更小了,所以答案总是零。 您应该在标记为“查找最小值”的
我有一个具有相同键值uid的多维数组。我想把它转换成子数组通过限制Foreachloop.you可以看到两个uid有值100和两个uid有值5465 我想得到这样的阵列。 我可以不使用foreach循环得到结果吗?
问题内容: 当每个块的总和大致相等时,如何将数组分成两个块? 问题答案: 像这样: 测试:
我有一个2D数组 行数=H 列数=W 2d数组本身=arr 它们都是整数 我的任务是返回从第一行的每个点开始的垂直线的最小和 输入 输出12 我曾想过使用递归来解决这个问题,但没有得到正确的结果。 函数取数组,我要计算的最小和的位置是(应该在第一行,因为它是一行)列数和行数,res是返回res的和,res在主函数中由arr在x行和y列初始化 我对这个想法很有把握,但我的总结方式可能是错误的