10
votes

Haskell Repa --- Cartographie avec des indices

Imaginez que je veux mapper une fonction sur un tableau, mais la fonction a un type non seulement de a -> b mais a -> int -> b c'est-à-dire que la fonction prend également un index. Comment puis-je faire ça?


0 commentaires

3 Réponses :


8
votes

Réponse courte, utilisez Traverse code>.

Exemple plus long: P>

import qualified Data.Array.Repa as A
import qualified Data.Vector.Unboxed as U

arr1 :: A.Array A.DIM2 Double
arr1 = A.fromVector (A.Z A.:. 2 A.:. 3) $ U.fromList [1::Double,2,3,4,5,6]

arr2 :: A.Array A.DIM2 Double
arr2 = A.traverse arr1 id (\lf i@(A.Z A.:. r A.:. c) -> 
                  (lf i) + (fromIntegral r) + (fromIntegral c))  


0 commentaires

8
votes

bonne question, et il n'a pas été documenté dans le Tutoriel Repa , donc je "VE Mise à jour avec Une nouvelle section sur les travers .

in particulier, traverse code> vous permet: p>

  • Changer la forme du tableau de sortie LI>
  • Index Toute EleemNt Li>
  • Observez l'élément actuel Li> ul>

    ce qui signifie que vous pouvez faire des choses comme: p>

    remplacez toutes les ELLEEMNTS avec leur indice de ligne em> p>

    > traverse a id (\f (Z :. i :. j :. k) -> f (Z :. i :. j :. k) * i) 
    [0,0,0,0,0,0,0,0,0
    ,10,11,12,13,14,15,16,17,18
    ,38,40,42,44,46,48,50,52,54]
    


0 commentaires

2
votes

Utilisez zipwith xxx


0 commentaires