Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/268.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
通过获得平均值',在C#中调整int数组的大小;不行?_C#_Arrays_C# 4.0 - Fatal编程技术网

通过获得平均值',在C#中调整int数组的大小;不行?

通过获得平均值',在C#中调整int数组的大小;不行?,c#,arrays,c#-4.0,C#,Arrays,C# 4.0,我使用以下代码将数组调整为新大小: 我想得到一个int数组,然后返回新数组,新数组的大小由Lastarray项的平均值决定。 (例如,将图像大小调整为新大小) private int[]ResizeArray(int[]LastArray,int NewSize) { if(LastArray.GetUpperBound(0)=(NewSize-1)) { 返回数组; } int i=0; int j=0; int c=0; int[]NewArray=newint[NewSize]; 对于(i

我使用以下代码将数组调整为新大小:

我想得到一个int数组,然后返回新数组,新数组的大小由Lastarray项的平均值决定。 (例如,将图像大小调整为新大小)

private int[]ResizeArray(int[]LastArray,int NewSize)
{
if(LastArray.GetUpperBound(0)=(NewSize-1))
{
返回数组;
}
int i=0;
int j=0;
int c=0;
int[]NewArray=newint[NewSize];
对于(i=1;i对于(j=(int)(i*((double)LastArray.GetUpperBound(0)/(NewSize));j不初始化NewArray[0]。

然后,您显示的代码无效,因为j循环指令不完整。

您不能仅拾取这样的值并将其相加,您需要对每个旧值的分数进行一些平均和计算,然后将其放入新值中。请看一下“重采样”算法,例如

下面是一个简单的重采样器,它先对第一个数组进行上采样,然后再对其进行下采样。虽然效率不高,但可能更容易理解:

    private static int[] ResizeArray(int[] oldArray, int newSize)
    {
        int oldSize = oldArray.Length;
        int rectangle = newSize * oldSize;

        var upsampled = Enumerable.Range(0, rectangle).Select(k => oldArray[k / newSize]).ToArray();
        var downSampled = Enumerable.Range(0, newSize).Select(j => Enumerable.Range(0, oldSize-1).Select(i => upsampled[j * oldSize + i])).Select(g => g.Average());
        return downSampled.Select(i => (int)i).ToArray();
    }

NewArray[0]==0
因为您正在以i=1而不是i=0开始外部for循环

数组其余部分中出现的两个不同值是因为某些块的
LastArray
元素比其他块多,因为它们不能平均分割。但是,您总是被相同的数
((double)LastArray.Length/(NewSize))分割
尝试计算平均值,但这不起作用。您应该除以添加到
c
的实际值,即

(int)((i + 1) * ((double)LastArray.GetUpperBound(0) / (NewSize))) - 
   (int)(i * ((double)LastArray.GetUpperBound(0) / (NewSize)))

这仅仅是为了调整数组大小吗?看起来你也在做一些我不懂的平均操作。你能详细说明一下你想要实现什么吗?@ahmadali所以你想调整数组大小并用平均项目数填充元素(平均项目数是
newSize
)?@fardjad:是的,但这段代码不返回真数组为什么不使用数组。调整大小?@Scott:它只返回新数组,包括从0到NewSize的最后一个数组的项。不平均!!!:这是什么:int[]NewArray=new int[NewSize];?!?如果我不初始化NewArray[]则没有结果,您没有设置显式值。因此您有0。
(int)((i + 1) * ((double)LastArray.GetUpperBound(0) / (NewSize))) - 
   (int)(i * ((double)LastArray.GetUpperBound(0) / (NewSize)))