a= PyPBLAS.pvher(alpha,x,a,[uplo='U'])
La función "PyPBLAS.pvher" implementa la siguiente operación entre vectores y matrices con elementos de tipo complejo:
Se ha de tener en cuenta que será el vector transpuesto conjugado de
x
, mientras que se corresponde con la transpuesta de x
.
En el caso que las dimensiones de alguna de las entradas no sea correcta, la
rutina PyPBLASpvher
informará de ello y no podrá finalizar la
operación.
Esta rutina se provee únicamente para matrices con elementos de tipo complejo. Las características de cada uno de los parámetros son las siguientes:
Parametros de Entrada
uplo='U'
: Triangular Superior (valor por defecto).
uplo='L'
: Triangular Inferior.
Parametros de Salida
A continuación mostramos un ejemplo en la utilización de esta rutina:
from PyACTS import * import PyPBLAS from RandomArray import * from Numeric import * #Dimension of Arrays n=6 #Initiliaze the Grid PyACTS.gridinit() if PyACTS.iread==1: print "Example of using PyPBLAS 2: PvHER" print "N=",n,";nprow x npcol:",PyACTS.nprow,"x",PyACTS.npcol print "Block's size:",PyACTS.mb,"*",PyACTS.nb alpha=5 print "alpha=",alpha x=ones([n,1])+1.j*reshape(range(n),[n,1]) print "x'=",transpose(x) a=identity(n,Complex) print "a=",a else: alpha,a,x=None,None,None #We convert Numeric Array to PyACTS.Scalapack Array ACTS_lib=1 # 1=Scalapack alpha=Scal2PyACTS(alpha,ACTS_lib) x=Num2PyACTS(x,ACTS_lib) a=Num2PyACTS(a,ACTS_lib) #We call PBLAS routine a= PyPBLAS.pvher(alpha,x,a) a_num=PyACTS2Num(a) if PyACTS.iread==1: print "PvHER=",transpose(a_num) PyACTS.gridexit()
[vgaliano@localhost EXAMPLES]$ mpirun -np 4 mpipython exPypvher.py Example of using PyPBLAS 2: PvHER N= 6 ;nprow x npcol: 2 x 2 Block's size: 2 * 2 alpha= 5 x'= [ [ 1.+0.j 1.+1.j 1.+2.j 1.+3.j 1.+4.j 1.+5.j]] a= [[ 1.+0.j 0.+0.j 0.+0.j 0.+0.j 0.+0.j 0.+0.j] [ 0.+0.j 1.+0.j 0.+0.j 0.+0.j 0.+0.j 0.+0.j] [ 0.+0.j 0.+0.j 1.+0.j 0.+0.j 0.+0.j 0.+0.j] [ 0.+0.j 0.+0.j 0.+0.j 1.+0.j 0.+0.j 0.+0.j] [ 0.+0.j 0.+0.j 0.+0.j 0.+0.j 1.+0.j 0.+0.j] [ 0.+0.j 0.+0.j 0.+0.j 0.+0.j 0.+0.j 1.+0.j]] PvHER= [[ 6. +0.j 0. +0.j 0. +0.j 0. +0.j 0. +0.j 0. +0.j] [ 5. -5.j 11. +0.j 0. +0.j 0. +0.j 0. +0.j 0. +0.j] [ 5.-10.j 15. -5.j 26. +0.j 0. +0.j 0. +0.j 0. +0.j] [ 5.-15.j 20.-10.j 35. -5.j 51. +0.j 0. +0.j 0. +0.j] [ 5.-20.j 25.-15.j 45.-10.j 65. -5.j 86. +0.j 0. +0.j] [ 5.-25.j 30.-20.j 55.-15.j 80.-10.j 105. -5.j 131. +0.j]]
uplo='U'
, es
decir, realizaremos los calculos unicamente que se encuentre en y por encima de
la diagonal de la matriz resultante. Si quisieramos obtener la parte por debajo
de la diagonal llamaríamos a la rutina del siguiente modo:
a= PyPBLAS.pvher(alpha,x,a,uplo='L')
See Sobre este documento... para sugerencias en cambios.