2009-08-29 17 views
10

ben bu okuyorum bazı kodda bir piton ndarray temp sahip bu uğrar: (. M yani eşdeğer * m)Matris ** 2 python/numpy'de ne anlama gelir?

x = temp**2 

bu nokta kare mi yoksa matris kare (yani m olmalıdır kare matris)?

temp = num.transpose(whatever) 
num.sum(temp**2,axis=1)) 

ve bu çevirmek: Özellikle, bu kodda devrik kurtulmak edip edemeyeceğini bilmek istiyorum azından 0,1 ms beni kurtaracak

num.sum(whatever**2,axis=0) 

, ve açıkça zamanıma değdi.
Teşekkürler! ** operatör ungooglable ve ben hiçbir şey bilmiyorum! a

cevap

12

Sadece her öğenin karesidir. Numpy dahil -

from numpy import * 
a = arange(4).reshape((2,2)) 
print a**2 

baskılar

[[0 1] 
[4 9]] 
+1

Woot, teşekkürler. Fifteeeeenherewecome. –

+1

Rica ederim. (Muhtemelen bariz notalara işaret ettim, eğer ndarray> 2 boyutta iseniz, transpoze etme, eksen değiştirme işleminin işe yaramayacağını düşünmüyorum.) – tom10

+1

Bunun nerede kafa karıştırıcı olabileceğini görebiliyorum. Python'u bilmeden ve gerçek (ve karmaşık) sayıların karesi için "kendi başına bir sayıyı çarpma" anlamına geldiğinin anlaşılması, bunun matrisler için "kendi başına bir matrisi çarpma" anlamına geldiğini varsaymak makul olurdu. Bu, matrisin elbette eşit sayıda sıra ve sütun içerdiği anlamına gelir. – duffymo

4

** böylece x**2 Python "x kare" anlamına gelir, Python zam-to-güç operatörü. Bu tür işlemler, her zaman öğeye göre eleman uygular, bu nedenledizisinin her bir öğesi (her ne kadar boyutta olursa olsun),her öğeyi ikiye katlayacaktır, ya da x+2 her öğeyi iki tarafından artıracaktır (her durumda, x uygun şekilde) x**2 etkilenmez - sonuç x ile aynı şekilden yeni bir geçici dizidir!).

Düzenleme: @ kaizer.ze işaret ettiği gibi numpy.array nesneler için yazdıklarımı tutarken, bu çarpma array için benzeri eleman operasyonla matris çarpma yerine eleman demektir numpy.matrix nesneler için geçerli (ve yok benzer şekilde güce yükselmek için) - aslında, bu iki tip arasındaki temel farktır. Scipy tutorial örneğin dediği gibi:

biz numpy.array veya numpy.matrix kullandığınızda bir fark yoktur. A * x, ikinci durum matrisinde ürününde, dizi ile birlikte öğesinden değil.

yani

, numpy reference koyar edilmiştir:

bir matris operasyonları ile 2 boyutlu doğasını muhafaza özel bir 2 boyutlu dizi olup. * (matris çarpımı) ve ** (matris gücü) gibi bazı özel işleçleri vardır.

+1

Peki, cevapladığım kadarıyla çok basit değil; dizi ve matrisin farklı davranışları bunu karıştırır ve '*' ve '**' gibi işleçler anlam değiştirir! (Eğer A * B matris çarpımı ise A, B matrisi, A ** 2'nin matris üssü olması gerekir.) – u0b34a0f6ae

+0

Evet, matris ile dizi arasında bir fark var - ama '**' yine de zamandır -to-power işlemi, matris üzerindeki işlemler "matris" e, bir dizide "elementlere" uygulanır. İyi nokta, açıklığa kavuşturmak için düzenleme yapalım. –

5

NumPy for Matlab Users'u okumanız gerekir. Elemansal güç işlemi burada belirtilir ve ayrıca, numpy ile bazı operatörlerin array ve matrix'a farklı uygulandığını da görebilirsiniz.

>>> from numpy import * 
>>> a = arange(4).reshape((2,2)) 
>>> print a**2 
[[0 1] 
[4 9]] 
>>> print matrix(a)**2 
[[ 2 3] 
[ 6 11]] 
İlgili konular