2017-04-22 8 views
1

私はラケットでmatplotlib.pyplot.matshowと似たようなことをしたいと思います。私はこれが些細な質問であることを理解していて、たぶん私はばかだと思うかもしれませんが、ドキュメントをプロットしたRacketを読んだ後は失敗しました。サークルの画像に変換されるだろう行列をイメージとしてラケットにプロットする方法は?

例行列:

#lang typed/racket 

(require math/array) 
(require plot) 

(: sq (-> Integer Integer)) 
(define (sq [v : Integer]) 
    (* v v)) 

(: make-2d-matrix (-> Integer Integer (Array Boolean))) 
(define (make-2d-matrix [s : Integer] [r : Integer]) 
    (let ([center : Integer (exact-round (/ s 2))]) 
    (let ([a (indexes-array ((inst vector Integer) s s))]) 
     (let ([b (inline-array-map (λ ([i : (Vectorof Index)]) 
          (+ 
          (sq (- (vector-ref i 0) center)) 
          (sq (- (vector-ref i 1) center)))) 
          a)]) 
     (array<= b (array (sq r))) 
     )))) 


(array-map (λ ([i : Boolean]) (if (eq? i #f) 0 1)) (make-2d-matrix 20 6)) 

は、誰かが私にヒントを与えることはできますか?

答えて

2

完全に愚かな質問ではありません。これは、Pythonライブラリプログラマーの軍隊と競争することが難しい分野の1つです。私はラケットでこれをどうやって行うのですか?

#lang racket 


(require 2htdp/image 
     math/array) 

;; a 10x10 array 
(define a 
    (build-array #(10 10) 
       (λ (e) 
       (match e 
        [(vector x y) 
        (cond [(= x y) x] 
          [else 0])])))) 

;; map a value to a color 
(define (cmap v) 
    (color (floor (* 255 (/ v 10))) 
     0 
     (floor (* 255 (- 1 (/ v 10)))))) 

(apply 
above 
(for/list ([y (in-range 10)]) 
    (apply 
    beside 
    (for/list ([x (in-range 10)]) 
    (rectangle 10 10 'solid (cmap (array-ref a (vector x y)))))))) 
+0

、!ありがとうございました! – Raoul

+0

ここに 'plot'ライブラリを使わない理由はありますか? –

+0

@ SamTobin-Hochstadt私はこのようにすることができなかったので、私はあなたのソリューションを'plot 'ライブラリで見ることに非常に興味があります。あなたの答えを例文とともに追加してもらえますか? – Raoul

1

私はプロットしたいものが正確ではありません。 plotライブラリはプロット関数を中心に設計されていますが、どの関数を表現したいのか分かりません。

(plot (points (cast (array->vector* m) (Vectorof (Vectorof Real)))

(plot3d (points3d (cast (array->vector* m) (Vectorof (Vectorof Real)))

array->vector*の種類が十分に固有のものではないためcastが必要とされている。ここで

は、行列をプロットするには、2つの方法があります。

+0

さて、上記の関数は、 'm'が私のサンプルコードから得られた行列で置き換えられたときにプロット空間の中心にある単一点をプロットするだけです(正方形の行列は' 0で埋められ、円の形状は ' '中央にある)。私が望むのは、ヒートマップ**のようなものです。ここで、(x; y)にプロットされた色は、それらの座標のマトリックス値に依存します。 – Raoul

関連する問題