修理切片和形状

时间:2015-05-14 10:00:18

标签: haskell repa

我在抓住repa Slice模块时遇到了一些麻烦,特别是它的类型和系列如何与slice函数一起使用。我相信对以下内容的回答会让我感到清楚。

假设x具有形状shapeOfList [m_0, m_1, …, m_{d-1}]。给定整数i < dj < mi,如何构建具有合适类型的东西,使其成为 slice的第二个参数,从{{1}中提取切片x冻结索引编号shapeOfList [m_0, …, m_{i-1}, m_{i+1}, …, m_{d-1}]定义的形状i

案例j中的示例如下:

  • d=2:提取行i=0
  • j:提取列i=1

1 个答案:

答案 0 :(得分:1)

2
5
54 78 0 4 9
3
1 2 3

145 6 将列表转换为索引,例如

shapeOfList [2,2] ==(ix2 2 2) - (Z:。2:.2)

#include<stdio.h>
int main()
{
    int T, N, test, array[20], sum[20];
    do {
        printf ("How Many Test Case \n");
        scanf ("%d", &T);
        if (T<1 || T>100){
            printf ("Please Input Integer 0<T<100 \n");
        }
    }    while (T<1 || T>100);

    for (test=0; test<T ; test++){
        printf ("How many Integers to sum? \n");
        scanf ("%d", &N);
        int i=0;
        while(i<N)
        scanf("%d",&array[i++]);

        int m=0, sum=0;
        for (m=0; m<N; m++)
        {
            sum = sum + array[m];
            printf ("%d\n", sum);
        }

    }
    return 0;
}

但是函数let arr = fromListUnboxed (ix2 3 3) [0..8] :: Array U DIM2 Double 采用一系列索引,这个索引范围使用关键字shapeOfListxs ! shapeOfList [2,2] == 8.0 在REPA中表示。例如,要从Matrix中提取 nth 行,语法为

slice

要提取 nth 列,请使用以下表示法

Any

令人困惑的是,在REPA词汇表中,数组索引(Z:.i:。i)和索引范围(Any:.n:.All)都被称为形状,但是一个只表示一个元素索引另一个代表索引数组。

编辑

从数组All中提取nRow n =computeUnboxedS $ slice arr (Any :. n :. All) -- xs :: Array U DIM1 Double -- nRow 2 = fromList [6.0,7.0,8.0] 维度似乎是正确的函数,例如对于3维

nCol n = computeUnboxedS $ slice arr (Any :. n ) -- xs :: Array U DIM1 Double
--  nCol 2 = fromList [2.0,5.0,8.0]

以获得更高的尺寸。 另一方面,Template Haskell可以帮助您选择要提取的维度。