Steven Lynn’s Blog

NumPy Operations Guide: APL-like Patterns

2025-4-22376 words2 min read
 
well, cs242 mentioned this
 
This guide explores NumPy operations and patterns that are reminiscent of APL programming concepts, demonstrating how NumPy provides similar vectorized operations and array manipulation capabilities.

1. Vectorization Techniques

Pseudo-vectorization

While NumPy's built-in functions automatically operate on arrays, custom functions may need explicit vectorization. Here are the approaches:
The @np.vectorize decorator provides a cleaner syntax, though it's important to note that it's essentially still a loop under the hood.

2. Condition-Based Operations

Finding Positions Meeting Conditions

np.argwhere returns indices of true elements in the array, similar to APL's where function.

Counting Elements Meeting Conditions

For multiple conditions, convert boolean arrays to integers before combining:

3. Array Filtering and Boolean Operations

Conditional Filtering

These operations are more concise than using np.logical_xxx functions. For actual bitwise operations, use np.bitwise_xxx.

Aggregate Boolean Operations

Finding First Match

4. Matrix Operations

Diagonal Operations

5. NumPy Types and Special Functions

NumPy provides various function types:
  • Universal Functions (ufuncs): Like np.minimum
  • Properties: Like np.minimum.outer
Example of outer operation:

Key Differences from APL

While NumPy provides similar functionality to APL, there are some key differences:
  1. NumPy requires explicit type conversion for boolean operations
  1. Syntax is more verbose compared to APL's symbolic notation
  1. Some operations that are primitive in APL require function composition in NumPy

Best Practices

  1. Use boolean indexing instead of explicit loops when possible
  1. Prefer NumPy's built-in functions over custom vectorized functions for performance
  1. Use astype(int) for boolean arithmetic operations
  1. Consider readability when choosing between different syntaxes for the same operation
Loading...