intersect — Return common elements or rows across arrays with MATLAB-compatible ordering and index outputs.
intersect(A, B) computes the set intersection of A and B. By default it returns the distinct common values sorted ascending, along with optional index outputs that map each result back to its originating position in the inputs.
How intersect works in RunMat
intersect(A, B)flattens both inputs column-major, removes duplicates, and returns the sorted intersection.[C, IA, IB] = intersect(A, B)also returns index vectors so thatC = A(IA)andC = B(IB).intersect(A, B, 'stable')preserves the first appearance order fromA.intersect(A, B, 'rows')treats each row as an element. Inputs must share the same number of columns.- Character arrays, string arrays, logical arrays, complex values, and numerical types are fully supported. Mixed classes raise a descriptive error.
- Legacy flags such as
'legacy'or'R2012a'are not supported in RunMat.
How intersect runs on the GPU
intersect registers as a residency sink. When the active acceleration provider offers a dedicated intersect hook, the set logic can execute directly on the device and return GPU-resident results. Until such a hook lands, RunMat automatically gathers GPU tensors to host memory, runs the CPU implementation, and materializes host-side outputs so behavior matches MathWorks MATLAB exactly.
GPU memory and residency
You usually do **not** need to call gpuArray manually. RunMat's planner keeps tensors resident on the GPU when profitable. If a provider lacks an intersect kernel the runtime gathers automatically, so explicit residency management is rarely needed. Explicit calls to gpuArray remain available for compatibility with MathWorks MATLAB workflows.
Examples
Finding common values in numeric vectors
A = [5 7 5 1];
B = [7 1 3];
[C, IA, IB] = intersect(A, B)Expected output:
C =
1
7
IA =
4
2
IB =
2
1Preserving input order with 'stable'
A = [4 2 4 1 3];
B = [3 4 5 1];
C = intersect(A, B, 'stable')Expected output:
C =
4
1
3Intersecting matrix rows
A = [1 2; 3 4; 1 2];
B = [2 3; 1 2];
[C, IA, IB] = intersect(A, B, 'rows')Expected output:
C =
1 2
IA =
1
IB =
2Working with strings and character arrays
names1 = ["apple" "orange" "pear"];
names2 = ["pear" "grape" "orange"];
[common, IA, IB] = intersect(names1, names2, 'stable')Expected output:
common =
1×2 string array
"orange" "pear"
IA =
2
3
IB =
3
1Using intersect on GPU arrays
G = gpuArray([10 4 6 4]);
H = gpuArray([6 4 2]);
result = intersect(G, H)Expected output:
result =
4
6FAQ
Does intersect keep duplicate values?
No. MATLAB and RunMat return each common value at most once. Use other logic (such as logical indexing) if you need multiset behavior.
What is the default ordering?
intersect sorts results ascending by default. Specify 'stable' to preserve the input order from A.
Can I intersect rows that contain strings?
Yes. String arrays support both element and row intersections. When using 'rows', the inputs must have the same number of columns.
Are NaN values considered equal?
Yes. NaN values are treated as equal for the purposes of intersection, matching MATLAB.
Is the 'legacy' flag supported?
No. RunMat only implements the modern MATLAB semantics. Passing 'legacy' or 'R2012a' raises an error.
Related functions to explore
These functions work well alongside intersect. Each page has runnable examples you can try in the browser.
union, unique, sort, sortrows, argsort, ismember, issorted, setdiff
Open-source implementation
Unlike proprietary runtimes, every RunMat function is open-source. Read exactly how intersect works, line by line, in Rust.
- View intersect.rs on GitHub
- Learn how the runtime works
- Found a bug? Open an issue with a minimal reproduction.
About RunMat
RunMat is an open-source runtime that executes MATLAB-syntax code — faster, on any GPU, with no license required.
- Simulations that took hours now take minutes. RunMat automatically optimizes your math for GPU execution on Apple, Nvidia, and AMD hardware. No code changes needed.
- Start running code in seconds. Open the browser sandbox or download a single binary. No license server, no IT ticket, no setup.
- A full development environment. GPU-accelerated 2D and 3D plotting, automatic versioning on every save, and a browser IDE you can share with a link.