torch.column_stack
Stacks 1-D arrays as columns into a 2-D array.
Treats 1D tensors as column vectors and stacks them horizontally to form a matrix.
For 2D+ tensors, equivalent to hstack(). Different from hstack() for 1D tensors,
which end-to-end concatenates rather than creating columns. Essential for:
- Creating design matrices: Stacking feature vectors as columns
- Building data matrices: Assembling multiple measurements as columns
- Linear algebra: Constructing matrices from column vectors
- Regression features: Creating feature matrix with samples as rows, features as columns
- Statistical analysis: Assembling data matrix from variable vectors
- Matrix construction: NumPy-like column stacking behavior
- Data organization: Logical grouping of variables as columns
Behavior by rank:
- 1D input: Shape [m] → becomes column [m, 1] → stacked horizontally → [m, n_tensors]
- 2D+ input: Equivalent to
hstack()→ concatenated along dim=1
Key differences:
- column_stack: 1D → [m, 1] columns → [m, n] matrix
- hstack: 1D → concatenate end-to-end → [m+n] vector
- vstack: 1D → [1, m] rows → [n, m] matrix
- Column vectors: 1D tensors become columns of matrix
- Matrix format: Results in [n_samples, n_features] standard format
- 1D creates 2D: Stacking 1D arrays always produces 2D result
- 2D+ uses hstack: Higher-rank tensors delegated to hstack
- Gradient propagation: Gradients flow back to all input tensors
- Preserves dtype and device: Output has same dtype and device as inputs
- NumPy-compatible: Follows NumPy's column_stack semantics
- Empty list: Passing empty tensor list raises error
- Different dtypes: All tensors should have compatible dtypes
- 1D array requirement: For proper 2D matrix, use 1D inputs
- Different from hstack: For 1D, behaves differently (columns vs concatenation)
Parameters
tensorsTensor[]- List of 1D or higher-dimensional tensors. Must be non-empty - 1D tensors treated as column vectors - 2D+ tensors passed to hstack()
Returns
Tensor– 2D or higher-dimensional tensor with columns stacked - For 1D inputs: shape [length, n_tensors] - For 2D+ inputs: shape same as hstack resultExamples
// Creating a data matrix from feature vectors
const var1 = torch.tensor([1, 2, 3, 4, 5]); // Variable 1: 5 samples
const var2 = torch.tensor([10, 20, 30, 40, 50]); // Variable 2: 5 samples
const var3 = torch.tensor([100, 200, 300, 400, 500]); // Variable 3: 5 samples
const data_matrix = torch.column_stack([var1, var2, var3]); // [5, 3]
// Data matrix: 5 samples × 3 variables, each variable is a column// Regression design matrix: features as columns
const x1 = torch.randn(100); // 100 samples of feature 1
const x2 = torch.randn(100); // 100 samples of feature 2
const x3 = torch.randn(100); // 100 samples of feature 3
const X = torch.column_stack([x1, x2, x3]); // [100, 3]
const y = torch.randn(100); // Target variable
// Design matrix X for regression: n_samples × n_features// Building feature matrix for linear model
const features = [];
for (let feature of ['age', 'income', 'credit_score']) {
const data = load_feature(feature); // Returns [n_samples] vector
features.push(data);
}
const X = torch.column_stack(features); // [n_samples, 3]
const predictions = model.predict(X);
// Feature matrix with 3 features as columns// Multi-dimensional data: 2D+ handled like hstack
const batch1 = torch.randn(32, 64); // [batch, features]
const batch2 = torch.randn(32, 128); // [batch, features]
const combined = torch.column_stack([batch1, batch2]); // [32, 192]
// For 2D+, behaves like hstack (concatenate along dim 1)// Statistical analysis: organizing variables as columns
const measurements = {
temperature: torch.randn(1000), // 1000 temperature readings
humidity: torch.randn(1000), // 1000 humidity readings
pressure: torch.randn(1000) // 1000 pressure readings
};
const data = torch.column_stack([
measurements.temperature,
measurements.humidity,
measurements.pressure
]); // [1000, 3]
// Environmental data matrix: 1000 observations × 3 variables