2013-11-14 14 views
5

Bu aptalca bir soru gibi görünüyor, ama etrafa biraz baktıktan sonra bunu anlayamıyorum, bu yüzden buraya soracağım.matris çarpımı, core.matrix

nasıl core.matrix bir 2x3 matris tarafından bir 3x2 matris çarpabilirsiniz? Çok basit bir şeyi yanlış anlamalı olmalıyım. Naily, bunun işe yaramasını bekledim ve core.matrix'in benim için temel matematiği yapacağını düşündüm.

(* (matrix [[1 0 -2] 
      [0 3 -1]]) 
    (matrix [[0 3] 
      [-2 -1] 
      [0 4]])) 

Ben bir google arama http://www.purplemath.com/modules/mtrxmult.htm ilk hit yoluyla bu örneği bulundu ve beklenen sonuç Yerine

[[ 0 -5] 
[-6 -7]] 

, ben alıyorum: peşin

RuntimeException Incompatible shapes, cannot broadcast [3 2] to [2 3] 
clojure.core.matrix.impl.persistent-vector/eval5013/fn--5014 
(persistent_vector.clj:152) 

teşekkür ederiz.

p.s. Benim ad sadece * matris operatörü öğeye göre çarpma olduğunu

(ns xyz 
    (:refer-clojure :exclude [* - + == /]) ; get from core.matrix 
    (:use clojure.core.matrix) 
    (:use clojure.core.matrix.operators) 
    (:gen-class)) 

cevap

9

core.matrix örneğin benziyor - yani, aynı boyutlara iki işlenen zorlar ve yeni bir matris oluşturur nerede elemanı en Sonuçtaki her konum, işlenenlerde o konumda bulunan elemanların ürünüdür.

Sana clojure.core.matrix den mmul fonksiyonu aradığınız düşünüyorum.

+0

Gerçekten de haklısınız. Teşekkürler! (mmul (matris [[1 0 -2] [0 3 -1]]) (matris [[0 3] [-2 -1] [0 4]])) ==> [[0 -5 ] [-6 -7]] –

+4

Göz önünde bulundurulması gereken bir seçenek, ad alanınıza '*' matris tanımını çekme adımını atlamak ve 'mmul' ile birlikte 'emul' komutunu kullanmaktır. Bu şekilde, kodunuzda ne anlama geldiğini unutama veya değişkenlerin sayı veya matris sayılarını çarpıp çarpmadığını merak etme şansı yoktur. Hem matrislere hem de sayılara uygulamak istediğim işlevleri tanımlamıyorsam, aşırı yüklenmiş aritmetik işleçlerin kullanılmasının soğuk görünmesine karşın (örneğin benim gibi) okuyucuları karıştırıp hatalara yol açabileceğini hissediyorum. Yine de bu kişisel tercih meselesi. – Mars

+0

@Mars Özellikle clojure.core'da tanımlanan işlevler söz konusu olduğunda% 100 katılıyorum. Bu kod, yeni bir ad alanına kopyalandığında, hala derlenebilir ancak tamamen farklı bir şey ifade edebilir. – Alex