What does the intersect function do in MATLAB / RunMat?
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 does the intersect function behave in MATLAB / 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.
intersect Function GPU Execution Behavior
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.
Examples of using the intersect function in MATLAB / RunMat
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
1
Preserving 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
3
Intersecting 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 =
2
Working 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
1
Using intersect on GPU arrays
G = gpuArray([10 4 6 4]);
H = gpuArray([6 4 2]);
result = intersect(G, H);
RunMat gathers the data to host memory (until providers implement a device kernel) and returns:
result =
4
6
FAQ
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.
GPU residency in RunMat (Do I need gpuArray?)
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.
See Also
Source & Feedback
- Source code:
crates/runmat-runtime/src/builtins/array/sorting_sets/intersect.rs - Found a bug? Open an issue with details and a minimal repro.