reshape
reshape(x, r, c)
Input: x, r, c · Output: no output
What it is
Reinterprets a value as a matrix of a given shape. x is the value being reshaped, a scalar, Vec or Mat; r (number) is the row count of the result; c (number) is the column count, and r * c must equal the number of elements x holds. This is a genuine element relayout (column-major) when x is a scalar or Vec, or when x is already an r×c Mat; when x is a Mat with one dimension equal to 1 it is also a real reshape. Reshaping a matrix that has more than one row *and* more than one column into a different two-dimensional shape does not relayout the data — it falls through to a broadcast check instead and errors unless the two shapes are broadcast-compatible, a real, confirmed engine limitation rather than a documentation simplification. expr -> (r, c) is postfix-style sugar for exactly this call — see below.
Overloads
x can be scalar, Vec, or Mat.
2 forms. Each carries its own inputs, outputs and worked example — pick the tab for the one you are calling.
| Code | Input | Output | Description |
result = reshape(x, r, c) where x is a scalar, Vec, or a Mat with one dimension equal to 1 | x scalar, Vec, or Matx is the value being reshaped, a scalar, Vec or Mat.r numberr (number) is the row count of the result.c numberc (number) is the column count, and r * c must equal the number of elements x holds. | result — | A genuine element relayout (column-major) into the new r×c shape. |
Examples
From the documentation, and run by the build -- the output and the figure below are what the engine actually produced. Simplest first.
v = [1, 2, 3, 4, 5, 6]
print(reshape(v, 2, 3)) # [1, 3, 5; 2, 4, 6] -- vector source, real relayout
[1, 3, 5; 2, 4, 6]
from core-math
N = 60
dt = 0.1
true_v = 2.0
t = (0 to N - 1) * dt
true_pos = true_v * t
measured = true_pos + 0.8 * randn(N)
F = [1, dt; 0, 1]
Q = [0.001, 0; 0, 0.001]
H = reshape([1, 0], 1, 2)
R = [0.64]
s = kalman_init([0, 0], [10, 0; 0, 10])
est_pos = zeros(1, N)
est_vel = zeros(1, N)
for k = 0 to N - 1
s = s.predict(F, Q)
s = s.update(H, [measured[k]], R)
est_pos[k] = s.x[0]
est_vel[k] = s.x[1]
end for
raw_err = rms(measured - true_pos)
filt_err = rms(est_pos - true_pos)
print("Position RMS error: raw sensor={raw_err:.3f}, Kalman estimate={filt_err:.3f}")
print("True velocity={true_v:.2f}, final estimated velocity={est_vel[N-1]:.3f}")
from tour
n_per_class = 60
c0x = normal(0, 0.6, n_per_class, seed=1)
c0y = normal(0, 0.6, n_per_class, seed=2)
c1x = normal(4, 0.6, n_per_class, seed=3)
c1y = normal(4, 0.6, n_per_class, seed=4)
Xc0 = hstack(reshape(c0x, n_per_class, 1), reshape(c0y, n_per_class, 1))
Xc1 = hstack(reshape(c1x, n_per_class, 1), reshape(c1y, n_per_class, 1))
Xc = vstack(Xc0, Xc1) # (120, 2)
n = 2 * n_per_class
idx = 0 to n - 1
y = floor(idx / n_per_class) # 0 for the first 60 rows, 1 for the last 60
function one_hot(labels, rows, k)
m = zeros(rows, k)
for i = 0 to rows - 1
m[i, labels[i]] = 1
end for
return m
end function
Y = one_hot(y, n, 2)
net = mlp_classifier(2, [8], 2, seed=42)
trained = net.fit(Xc, Y, epochs=200, lr=0.1, loss="cross_entropy")
function accuracy(model, X, Ytrue, rows)
logits = model.predict(X)
correct = 0
for i = 0 to rows - 1
if argmax(logits[i, :]) == argmax(Ytrue[i, :]) then
correct = correct + 1
end if
end for
return correct / rows
end function
acc = accuracy(trained, Xc, Y, n)
print("training accuracy = {acc:.4f}")
training accuracy = 1.0000
from quickstart
| Code | Input | Output | Description |
result = reshape(x, r, c) where x is a Mat with more than one row and more than one column | x scalar, Vec, or Matx is the value being reshaped, a scalar, Vec or Mat.r numberr (number) is the row count of the result.c numberc (number) is the column count, and r * c must equal the number of elements x holds. | result — | Not a relayout. Falls through to a broadcast check instead and errors unless the two shapes are broadcast-compatible — a real, confirmed engine limitation, not a documentation simplification. |
Examples
From the documentation, and run by the build -- the output and the figure below are what the engine actually produced. Simplest first.
v = [1, 2, 3, 4, 5, 6]
print(reshape(v, 2, 3)) # [1, 3, 5; 2, 4, 6] -- vector source, real relayout
[1, 3, 5; 2, 4, 6]
from core-math
N = 60
dt = 0.1
true_v = 2.0
t = (0 to N - 1) * dt
true_pos = true_v * t
measured = true_pos + 0.8 * randn(N)
F = [1, dt; 0, 1]
Q = [0.001, 0; 0, 0.001]
H = reshape([1, 0], 1, 2)
R = [0.64]
s = kalman_init([0, 0], [10, 0; 0, 10])
est_pos = zeros(1, N)
est_vel = zeros(1, N)
for k = 0 to N - 1
s = s.predict(F, Q)
s = s.update(H, [measured[k]], R)
est_pos[k] = s.x[0]
est_vel[k] = s.x[1]
end for
raw_err = rms(measured - true_pos)
filt_err = rms(est_pos - true_pos)
print("Position RMS error: raw sensor={raw_err:.3f}, Kalman estimate={filt_err:.3f}")
print("True velocity={true_v:.2f}, final estimated velocity={est_vel[N-1]:.3f}")
from tour
n_per_class = 60
c0x = normal(0, 0.6, n_per_class, seed=1)
c0y = normal(0, 0.6, n_per_class, seed=2)
c1x = normal(4, 0.6, n_per_class, seed=3)
c1y = normal(4, 0.6, n_per_class, seed=4)
Xc0 = hstack(reshape(c0x, n_per_class, 1), reshape(c0y, n_per_class, 1))
Xc1 = hstack(reshape(c1x, n_per_class, 1), reshape(c1y, n_per_class, 1))
Xc = vstack(Xc0, Xc1) # (120, 2)
n = 2 * n_per_class
idx = 0 to n - 1
y = floor(idx / n_per_class) # 0 for the first 60 rows, 1 for the last 60
function one_hot(labels, rows, k)
m = zeros(rows, k)
for i = 0 to rows - 1
m[i, labels[i]] = 1
end for
return m
end function
Y = one_hot(y, n, 2)
net = mlp_classifier(2, [8], 2, seed=42)
trained = net.fit(Xc, Y, epochs=200, lr=0.1, loss="cross_entropy")
function accuracy(model, X, Ytrue, rows)
logits = model.predict(X)
correct = 0
for i = 0 to rows - 1
if argmax(logits[i, :]) == argmax(Ytrue[i, :]) then
correct = correct + 1
end if
end for
return correct / rows
end function
acc = accuracy(trained, Xc, Y, n)
print("training accuracy = {acc:.4f}")
training accuracy = 1.0000
from quickstart
How it works
Shape contracts that cannot mean anything without dimensions. Naming the full form is the entire fix the reader needs.
From the note above this builtin in the interpreter, where the reasoning was written down as it was built.