Files
claude-scientific-skills/scientific-skills/matlab/references/matrices-arrays.md
2026-01-05 10:15:22 -08:00

350 lines
11 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# Matrices and Arrays Reference
## Table of Contents
1. [Array Creation](#array-creation)
2. [Indexing and Subscripting](#indexing-and-subscripting)
3. [Array Manipulation](#array-manipulation)
4. [Concatenation and Reshaping](#concatenation-and-reshaping)
5. [Array Information](#array-information)
6. [Sorting and Searching](#sorting-and-searching)
## Array Creation
### Basic Creation
```matlab
% Direct specification
A = [1 2 3; 4 5 6; 7 8 9]; % 3x3 matrix (rows separated by ;)
v = [1, 2, 3, 4, 5]; % Row vector
v = [1; 2; 3; 4; 5]; % Column vector
% Range operators
v = 1:10; % 1 to 10, step 1
v = 0:0.5:5; % 0 to 5, step 0.5
v = 10:-1:1; % 10 down to 1
% Linearly/logarithmically spaced
v = linspace(0, 1, 100); % 100 points from 0 to 1
v = logspace(0, 3, 50); % 50 points from 10^0 to 10^3
```
### Special Matrices
```matlab
% Common patterns
I = eye(n); % n×n identity matrix
I = eye(m, n); % m×n identity matrix
Z = zeros(m, n); % m×n zeros
O = ones(m, n); % m×n ones
D = diag([1 2 3]); % Diagonal matrix from vector
d = diag(A); % Extract diagonal from matrix
% Random matrices
R = rand(m, n); % Uniform [0,1]
R = randn(m, n); % Normal (mean=0, std=1)
R = randi([a b], m, n); % Random integers in [a,b]
R = randperm(n); % Random permutation of 1:n
% Logical arrays
T = true(m, n); % All true
F = false(m, n); % All false
% Grids for 2D/3D
[X, Y] = meshgrid(x, y); % 2D grid from vectors
[X, Y, Z] = meshgrid(x, y, z); % 3D grid
[X, Y] = ndgrid(x, y); % Alternative (different orientation)
```
### Creating from Existing
```matlab
A_like = zeros(size(B)); % Same size as B
A_like = ones(size(B), 'like', B); % Same size and type as B
A_copy = A; % Copy (by value, not reference)
```
## Indexing and Subscripting
### Basic Indexing
```matlab
% Single element (1-based indexing)
elem = A(2, 3); % Row 2, column 3
elem = A(5); % Linear index (column-major order)
% Ranges
row = A(2, :); % Entire row 2
col = A(:, 3); % Entire column 3
sub = A(1:2, 2:3); % Rows 1-2, columns 2-3
% End keyword
last = A(end, :); % Last row
last3 = A(end-2:end, :); % Last 3 rows
```
### Logical Indexing
```matlab
% Find elements meeting condition
idx = A > 5; % Logical array
elements = A(A > 5); % Extract elements > 5
A(A < 0) = 0; % Set negative elements to 0
% Combine conditions
idx = (A > 0) & (A < 10); % AND
idx = (A < 0) | (A > 10); % OR
idx = ~(A == 0); % NOT
```
### Linear Indexing
```matlab
% Convert between linear and subscript indices
[row, col] = ind2sub(size(A), linearIdx);
linearIdx = sub2ind(size(A), row, col);
% Find indices of nonzero/condition
idx = find(A > 5); % Linear indices where A > 5
idx = find(A > 5, k); % First k indices
idx = find(A > 5, k, 'last'); % Last k indices
[row, col] = find(A > 5); % Subscript indices
```
### Advanced Indexing
```matlab
% Index with arrays
rows = [1 3 5];
cols = [2 4];
sub = A(rows, cols); % Submatrix
% Logical indexing with another array
B = A(logical_mask); % Elements where mask is true
% Assignment with indexing
A(1:2, 1:2) = [10 20; 30 40]; % Assign submatrix
A(:) = 1:numel(A); % Assign all elements (column-major)
```
## Array Manipulation
### Element-wise Operations
```matlab
% Arithmetic (element-wise uses . prefix)
C = A + B; % Addition
C = A - B; % Subtraction
C = A .* B; % Element-wise multiplication
C = A ./ B; % Element-wise division
C = A .\ B; % Element-wise left division (B./A)
C = A .^ n; % Element-wise power
% Comparison (element-wise)
C = A == B; % Equal
C = A ~= B; % Not equal
C = A < B; % Less than
C = A <= B; % Less than or equal
C = A > B; % Greater than
C = A >= B; % Greater than or equal
```
### Matrix Operations
```matlab
% Matrix arithmetic
C = A * B; % Matrix multiplication
C = A ^ n; % Matrix power
C = A'; % Conjugate transpose
C = A.'; % Transpose (no conjugate)
% Matrix functions
B = inv(A); % Inverse
B = pinv(A); % Pseudoinverse
d = det(A); % Determinant
t = trace(A); % Trace (sum of diagonal)
r = rank(A); % Rank
n = norm(A); % Matrix/vector norm
n = norm(A, 'fro'); % Frobenius norm
% Solve linear systems
x = A \ b; % Solve Ax = b
x = b' / A'; % Solve xA = b
```
### Common Functions
```matlab
% Apply to each element
B = abs(A); % Absolute value
B = sqrt(A); % Square root
B = exp(A); % Exponential
B = log(A); % Natural log
B = log10(A); % Log base 10
B = sin(A); % Sine (radians)
B = sind(A); % Sine (degrees)
B = round(A); % Round to nearest integer
B = floor(A); % Round down
B = ceil(A); % Round up
B = real(A); % Real part
B = imag(A); % Imaginary part
B = conj(A); % Complex conjugate
```
## Concatenation and Reshaping
### Concatenation
```matlab
% Horizontal (side by side)
C = [A B]; % Concatenate columns
C = [A, B]; % Same as above
C = horzcat(A, B); % Function form
C = cat(2, A, B); % Concatenate along dimension 2
% Vertical (stacked)
C = [A; B]; % Concatenate rows
C = vertcat(A, B); % Function form
C = cat(1, A, B); % Concatenate along dimension 1
% Block diagonal
C = blkdiag(A, B, C); % Block diagonal matrix
```
### Reshaping
```matlab
% Reshape
B = reshape(A, m, n); % Reshape to m×n (same total elements)
B = reshape(A, [], n); % Auto-compute rows
v = A(:); % Flatten to column vector
% Transpose and permute
B = A'; % Transpose 2D
B = permute(A, [2 1 3]); % Permute dimensions
B = ipermute(A, [2 1 3]); % Inverse permute
% Remove/add dimensions
B = squeeze(A); % Remove singleton dimensions
B = shiftdim(A, n); % Shift dimensions
% Replication
B = repmat(A, m, n); % Tile m×n times
B = repelem(A, m, n); % Repeat elements
```
### Flipping and Rotating
```matlab
B = flip(A); % Flip along first non-singleton dimension
B = flip(A, dim); % Flip along dimension dim
B = fliplr(A); % Flip left-right (columns)
B = flipud(A); % Flip up-down (rows)
B = rot90(A); % Rotate 90° counterclockwise
B = rot90(A, k); % Rotate k×90°
B = circshift(A, k); % Circular shift
```
## Array Information
### Size and Dimensions
```matlab
[m, n] = size(A); % Rows and columns
m = size(A, 1); % Number of rows
n = size(A, 2); % Number of columns
sz = size(A); % Size vector
len = length(A); % Largest dimension
num = numel(A); % Total number of elements
ndim = ndims(A); % Number of dimensions
```
### Type Checking
```matlab
tf = isempty(A); % Is empty?
tf = isscalar(A); % Is scalar (1×1)?
tf = isvector(A); % Is vector (1×n or n×1)?
tf = isrow(A); % Is row vector?
tf = iscolumn(A); % Is column vector?
tf = ismatrix(A); % Is 2D matrix?
tf = isnumeric(A); % Is numeric?
tf = isreal(A); % Is real (no imaginary)?
tf = islogical(A); % Is logical?
tf = isnan(A); % Which elements are NaN?
tf = isinf(A); % Which elements are Inf?
tf = isfinite(A); % Which elements are finite?
```
### Comparison
```matlab
tf = isequal(A, B); % Are arrays equal?
tf = isequaln(A, B); % Equal, treating NaN as equal?
tf = all(A); % All nonzero/true?
tf = any(A); % Any nonzero/true?
tf = all(A, dim); % All along dimension
tf = any(A, dim); % Any along dimension
```
## Sorting and Searching
### Sorting
```matlab
B = sort(A); % Sort columns ascending
B = sort(A, 'descend'); % Sort descending
B = sort(A, dim); % Sort along dimension
[B, idx] = sort(A); % Also return original indices
B = sortrows(A); % Sort rows by first column
B = sortrows(A, col); % Sort by specific column(s)
B = sortrows(A, col, 'descend');
```
### Unique and Set Operations
```matlab
B = unique(A); % Unique elements
[B, ia, ic] = unique(A); % With index information
B = unique(A, 'rows'); % Unique rows
% Set operations
C = union(A, B); % Union
C = intersect(A, B); % Intersection
C = setdiff(A, B); % A - B (in A but not B)
C = setxor(A, B); % Symmetric difference
tf = ismember(A, B); % Is each element of A in B?
```
### Min/Max
```matlab
m = min(A); % Column minimums
m = min(A, [], 'all'); % Global minimum
[m, idx] = min(A); % With indices
m = min(A, B); % Element-wise minimum
M = max(A); % Column maximums
M = max(A, [], 'all'); % Global maximum
[M, idx] = max(A); % With indices
[minVal, minIdx] = min(A(:)); % Global min with linear index
[maxVal, maxIdx] = max(A(:)); % Global max with linear index
% k smallest/largest
B = mink(A, k); % k smallest elements
B = maxk(A, k); % k largest elements
```
### Sum and Product
```matlab
s = sum(A); % Column sums
s = sum(A, 'all'); % Total sum
s = sum(A, dim); % Sum along dimension
s = cumsum(A); % Cumulative sum
p = prod(A); % Column products
p = prod(A, 'all'); % Total product
p = cumprod(A); % Cumulative product
```