summaryrefslogtreecommitdiff
path: root/scipy/weave/examples/array3d.py
diff options
context:
space:
mode:
authorTravis Oliphant <oliphant@enthought.com>2005-09-26 20:20:16 +0000
committerTravis Oliphant <oliphant@enthought.com>2005-09-26 20:20:16 +0000
commit45d01a4be1c4221132ba46d687e6af3a8df3329b (patch)
treece3be5290e918def7c7187e747c5460193b0ca85 /scipy/weave/examples/array3d.py
parentccd1c3db37672627aa4fe0fdb5437f5dddc0fe86 (diff)
downloadnumpy-45d01a4be1c4221132ba46d687e6af3a8df3329b.tar.gz
Moved weave
Diffstat (limited to 'scipy/weave/examples/array3d.py')
-rw-r--r--scipy/weave/examples/array3d.py105
1 files changed, 105 insertions, 0 deletions
diff --git a/scipy/weave/examples/array3d.py b/scipy/weave/examples/array3d.py
new file mode 100644
index 000000000..05c7da179
--- /dev/null
+++ b/scipy/weave/examples/array3d.py
@@ -0,0 +1,105 @@
+""" A simple example to show how to access a 3D scipy_base.numerix array. One
+example shows how to access the scipy_base.numerix array using blitz type
+converters and the other shows how it can be done without using blitz
+by accessing the scipy_base.numerix array data directly.
+
+"""
+
+import weave
+from weave import converters
+import scipy_base.numerix
+
+def create_array():
+ """Creates a simple 3D scipy_base.numerix array with unique values at each
+ location in the matrix.
+
+ """
+ rows, cols, depth = 2, 3, 4
+ arr = scipy_base.numerix.zeros((rows, cols, depth), 'i')
+ count = 0
+ for i in range(rows):
+ for j in range(cols):
+ for k in range(depth):
+ arr[i,j,k] = count
+ count += 1
+ return arr
+
+
+def pure_inline(arr):
+ """Prints the given 3D array by accessing the raw scipy_base.numerix data and
+ without using blitz converters.
+
+ Notice the following:
+ 1. '\\n' to escape generating a newline in the C++ code.
+ 2. rows, cols = Narr[0], Narr[1].
+ 3. Array access using arr[(i*cols + j)*depth + k].
+
+ """
+
+ code = """
+ int rows = Narr[0];
+ int cols = Narr[1];
+ int depth = Narr[2];
+ for (int i=0; i < rows; i++)
+ {
+ for (int j=0; j < cols; j++)
+ {
+ printf("img[%3d][%3d]=", i, j);
+ for (int k=0; k< depth; ++k)
+ {
+ printf(" %3d", arr[(i*cols + j)*depth + k]);
+ }
+ printf("\\n");
+ }
+ }
+ """
+
+ weave.inline(code, ['arr'])
+
+
+def blitz_inline(arr):
+ """Prints the given 3D array by using blitz converters which
+ provides a scipy_base.numerix-like syntax for accessing the scipy_base.numerix data.
+
+ Notice the following:
+ 1. '\\n' to escape generating a newline in the C++ code.
+ 2. rows, cols = Narr[0], Narr[1].
+ 3. Array access using arr(i, j, k).
+
+ """
+
+ code = """
+ int rows = Narr[0];
+ int cols = Narr[1];
+ int depth = Narr[2];
+ for (int i=0; i < rows; i++)
+ {
+ for (int j=0; j < cols; j++)
+ {
+ printf("img[%3d][%3d]=", i, j);
+ for (int k=0; k< depth; ++k)
+ {
+ printf(" %3d", arr(i, j, k));
+ }
+ printf("\\n");
+ }
+ }
+ """
+
+ weave.inline(code, ['arr'], type_converters=converters.blitz)
+
+
+def main():
+ arr = create_array()
+ print "scipy_base.numerix:"
+ print arr
+
+ print "Pure Inline:"
+ pure_inline(arr)
+
+ print "Blitz Inline:"
+ blitz_inline(arr)
+
+
+if __name__ == '__main__':
+ main()