首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >Haskell使用索引创建带有子向量的向量

Haskell使用索引创建带有子向量的向量
EN

Stack Overflow用户
提问于 2016-05-06 14:11:35
回答 4查看 358关注 0票数 0

我试图用一个子向量来创建一个向量,该向量由从另一个向量中取出的元素组成,它使用一个子向量索引。b中的每个元素对应于a中的元素在放入c时应该具有的子向量索引。

代码语言:javascript
运行
AI代码解释
复制
import Data.Vector
let a = fromList [9,2,3,7,4,1,8,5]
let b = fromList [3,3,2,0,1,1,2,2]
let c = fromList [ a ! k | k <- b ]
Expected c = [[7],[4,1],[3,8,5],[9,2]]

我有点卡住了,弄错了

无法匹配stmt列表理解中的预期类型Int与实际类型向量整数k <- b

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2016-05-06 14:23:22

这是行不通的,因为b是向量,而不是列表:

代码语言:javascript
运行
AI代码解释
复制
k <- b

然而,这样做是可行的:

代码语言:javascript
运行
AI代码解释
复制
[ ... | k <- toList b ]

接下来,ab的类型是Vector Integer!运算符接受Int。因此,您需要使用fromInteger转换索引。

代码语言:javascript
运行
AI代码解释
复制
let c = fromList [ a ! fromInteger k | k <- toList b]

更新

下面是一种在不重复传递数组的情况下执行转换的方法:

代码语言:javascript
运行
AI代码解释
复制
import Data.List

fst3  (b,_,_) = b
third (_,_,a) = a

doit :: Vector Int -> Vector Int -> [[Int]]
doit av bv = [ map third g | g <- groups ]
  where
    triples = zip3 (V.toList bv) [1..] (V.toList av)
    groups = groupBy (\s t -> fst3 s == fst3 t) $ sort triples

这基本上是一个Schwartzian变换,在排序步骤之后添加了一个groupBy。对三元组的排序是以规范的方式进行的--第一个坐标上的lex排序,然后是第二个坐标,然后是第三个坐标。

还有其他为groups编写表达式的方法

代码语言:javascript
运行
AI代码解释
复制
import Data.Funcition (on)
import GHC.Exts (groupWith)

    ...
    groups = groupBy (on (==) fst3) $ sort triples
    groups = groupWith fst3 triples

请注意,groupBy要求对三元组进行排序,而groupWith不进行排序。

票数 4
EN

Stack Overflow用户

发布于 2016-05-06 15:43:27

在ErikR的帮助下,我想到了以下几点:

代码语言:javascript
运行
AI代码解释
复制
let c = fromList [fromList [a ! i | i <- [0..Data.Vector.length b-1], (b ! i)==j] | j <- [0..Data.Vector.maximum(b)]]

它能用,但它不漂亮,更好吗?

票数 0
EN

Stack Overflow用户

发布于 2016-05-06 15:46:25

看起来你想要的可能是

代码语言:javascript
运行
AI代码解释
复制
accumulate (flip (:)) (replicate n []) (zip b a)

...although,您必须显式地计算n,可能是maximum b + 1

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/37082155

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档