Vector Operations in IronPython QuickStart Sample

Illustrates how to perform operations on Vector objects, including construction, element access, arithmetic operations in IronPython.

View this sample in: C# Visual Basic F#

```Python
import numerics

from math import exp

# The Vector class resides in the Extreme.Mathematics
# namespace.
from Extreme.Mathematics.LinearAlgebra import *
# The delegate class resides in the Extreme.Mathematics 
# namespace.
from Extreme.Mathematics import *

# Illustrates operations on Vector objects from the
# Extreme.Mathematics.LinearAlgebra namespace of Numerics.NET.

# For details on the basic workings of Vector 
# objects, including constructing, copying and
# cloning vectors, see the BasicVectors QuickStart
# Sample.
#
# Let's create some vectors to work with.
v1 = Vector([1, 2, 3, 4, 5])
v2 = Vector([1, -2, 3, -4, 5])
v3 = Vector([3, 2, 1, 0, -1])

#
# Vector Arithmetic
#

# The Vector class defines overloaded addition, # subtraction, and multiplication and division
# operators:
print "v1 =", v1
print "v2 =", v2
print "Basic arithmetic:"
v = -v1
print "-v1 =", v
v = v1 + v2
print "v1 + v2 =", v
v = v1 - v2
print "v1 - v2 =", v
# Vectors can only be multiplied or divided by
# a real number. For dot products, see the
# DotProduct method.
v = 5 * v1
print "5 * v1 =", v
v = v1 * 5
print "v1 * 5 =", v
v = v1 / 5
print "v1 / 5 =", v

# For each operator, there is a corresponding
# static method. For example: v1 + v2 is
# equivalent to:
v = Vector.Add(v1, v2)
# v1 - v2 corresponds to:
v = Vector.Subtract(v1, v2)
# You can also apply these methods to Vector objects.
# In this case, they change the first operand.
print "v3 =", v3
v3.Add(v1)
# Note that this is different from the += operator!
# The += operator creates a Vector.Create object, # whereas the Add method above does not.
print "v3+v1 -> v3 =", v3
# This method is overloaded so you can directly
# add a scaled vector:
v3.Add(-2, v1)
print "v3-2v1 -> v3 =", v3
# Corresponding to the * operator, we have the
# scale method:
v3.Multiply(3)
print "3v3 -> v3 =", v3
print 

#
# Norms, dot products, etc.
#
print "Norms, dot products, etc."
# The dot product is calculated in one of two ways:
# Using the static DotProduct method:
a = Vector.DotProduct(v1, v2)
# Or using the DotProduct method on one of the two
# vectors:
b = v1.DotProduct.Overloads[DenseVector](v2)
print "DotProduct(v1, v2) = {0} = {1}".format(a, b)
# The Norm method returns the standard two norm 
# of a Vector:
a = v1.Norm()
print "|v1| =", a
# .the Norm method is overloaded to allow other norms, # including the one-norm:
a = v1.Norm(1)
print "one norm(v1) =", a
# ...the positive infinity norm, which returns the
# absolute value of the largest component:
a = v1.Norm(float.PositiveInfinity)
print "+inf norm(v1) =", a
# ...the negative infinity norm, which returns the
# absolute value of the smallest component:
a = v1.Norm(float.NegativeInfinity)
print "-inf norm(v1) =", a
# ...and even the zero norm, which simply returns
# the number of components of the vector:
a = v1.Norm(0)
print "zero-norm(v1) =", a
# You can get the square of the two norm with the
# NormSquared method.
a = v1.NormSquared()
print "|v1|^2 =", a
print 
			
#
# Largest and smallest elements
#
# The Vector class defines methods to find the
# largest or smallest element or its index.
print "v2 =", v2
# The Max method returns the largest element:
print "Max(v2) =", v2.Max()
# The AbsoluteMax method returns the element with
# the largest absolute value.
print "Absolute max(v2) =", v2.AbsoluteMax()
# The Min method returns the smallest element:
print "Min(v2) =", v2.Min()
# The AbsoluteMin method returns the element with
# the smallest absolute value.
print "Absolute min(v2) =", v2.AbsoluteMin()
# Each of these methods has an equivalent method
# that returns the zero-based index of the element 
# instead of its value, for example:
print "Index of Min(v2) =", v2.MinIndex()

# Finally, the Apply method lets you apply
# an arbitrary function to each element of the
# vector:
v1.Apply(exp)
print "Exp(v1) =", v1
# There is also a static method that returns a 
# Vector.Create object:
v = Vector.Apply(exp, v2)
```