首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >球拍中的数组操纵:错误“形状的预期指标”(6);给定的“#(6)”

球拍中的数组操纵:错误“形状的预期指标”(6);给定的“#(6)”
EN

Stack Overflow用户
提问于 2016-02-02 00:29:37
回答 1查看 152关注 0票数 2

在写这个问题之前,我试着把我的代码简化到导致错误的部分,而简化的代码工作.所以我首先要说的是:

这段代码应该取每个x值,并用x值在索引处增加y项。它会变异。参见下面的代码示例。

代码语言:javascript
复制
#lang racket
(require math/array)
(define xs (array #[5 1 3 1]))
(define ys (mutable-array #[0 0 0 0 0 0 0 0 0 0]))
(define result (array-map (λ (x) (array-set! ys
                                         (vector x)
                                         (add1 (array-ref ys (vector x)))))
                      xs))

>> ys
(mutable-array #[0 2 0 1 0 2 0 0 0 0])

下面是我在这个问题标题中出现错误时正在编写的代码:

第一个函数接受一个未排序的数组,并在其中找到最大值。

代码语言:javascript
复制
(define (make-auxiliary-array unsorted)
  (local ((define size-for-aux (array-ref (array-axis-max unsorted 0)
                                          #()))) 
    (array->mutable-array (make-array (vector size-for-aux) 0))))

第二个函数类似于顶部的工作代码。唯一的区别似乎是我在本地定义和使用一个数组。在顶部的工作代码片段中,称为辅助性数组的数组类似于ys。

代码语言:javascript
复制
(define (count-instances unsorted)
  (local ((define auxiliary (make-auxiliary-array unsorted)))
    (array-map (λ (u) (array-set! auxiliary
                                  (vector u)
                                  (add1 (array-ref auxiliary (vector u)))))
               unsorted)))

>> (count-instances (array #[3 6 4 1 3 4 1 4]))
array-ref: expected indexes for shape '(6); given '#(6)

问题:

  1. 为什么(计数-实例)函数有一个错误,但结果值没有?
  2. 我计算出,我需要使用(向量u)从一个值建立一个索引。为什么我应该使用向量而不是(数组u)?
  3. 这也许是一个完全不同的问题,但为什么(数组#42)与(数组42)不同呢?
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-02-02 02:14:17

您的示例不起作用的原因是#(6)不是形状#(6)的有效索引。#(0)#(1),。#(5)是有效的索引,但就像向量或列表索引一样,它们从0n - 1

问题在size-for-aux in make-auxiliary-array中。表达式(array-ref (array-axis-max unsorted 0) #())是最大索引的大小,但size-for-aux必须比它多一个,即(add1 (array-ref (array-axis-max unsorted 0) #()))

你的例子是:

代码语言:javascript
复制
#lang racket
(require math/array)
(define (make-auxiliary-array unsorted)
  (local ((define size-for-aux (add1 (array-ref (array-axis-max unsorted 0)
                                                #()))))
    (array->mutable-array (make-array (vector size-for-aux) 0))))
(define (count-instances unsorted)
  (local ((define auxiliary (make-auxiliary-array unsorted)))
    (array-map (λ (u) (array-set! auxiliary
                                  (vector u)
                                  (add1 (array-ref auxiliary (vector u)))))
               unsorted)))
(count-instances (array #[3 6 4 1 3 4 1 4]))

但是,这会产生(array #[#<void> #<void> #<void> #<void> #<void> #<void> #<void> #<void>]),因为您从未真正返回auxiliary。所以你可能是说:

代码语言:javascript
复制
(define (count-instances unsorted)
  (local ((define auxiliary (make-auxiliary-array unsorted)))
    (array-map (λ (u) (array-set! auxiliary
                                  (vector u)
                                  (add1 (array-ref auxiliary (vector u)))))
               unsorted)
    auxiliary))
(count-instances (array #[3 6 4 1 3 4 1 4]))

产生(mutable-array #[0 2 0 3 3 0 1])

嗯。我以为是(mutable-array #[0 2 0 2 3 0 1])。如果这是你真正想要的,你还有更多的东西要弄清楚,但那将是一个不同的问题。

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

https://stackoverflow.com/questions/35143008

复制
相关文章

相似问题

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