Índice de array por filas: desplazamiento y dirección
En un array de 3×4×5 con elementos de 8 bytes, la posición 1, 2, 3 es el elemento 33: desplazamiento de 264 bytes y dirección 4360 desde la base 4096. Verá cada paso intermedio para revisar aritmética de punteros o depurar un búfer aplanado. Gratis en su navegador.
- Gratis
- Funciona en su navegador
- Sin registro
- Sus datos no salen de su equipo
Ejecutar — gratis
Ejemplo resuelto
- Dimensiones
- 3, 4, 5
- Índices
- 1, 2, 3
- Tamaño del elemento (bytes)
- 8
- Dirección base
- 4 096
- Orden
- row-major
- Pasos (strides)
- 20, 5, 1
- Aportes
- 20, 10, 3
- Índice lineal
- 33
Esta calculadora convierte las coordenadas de un array multidimensional en la posición lineal única que utiliza una disposición contigua por filas al estilo C. Introduzca las dimensiones desde la más externa hasta la más interna, el índice de base cero correspondiente a cada eje, el tamaño de cada elemento en bytes y, si lo conoce, una dirección base. El resultado detalla los pasos, la aportación de cada índice, el desplazamiento del elemento y la dirección final en bytes.
Introduzca dimensiones e índices en el mismo orden de ejes
Enumere los tamaños desde el eje más externo hasta el más interno, tal como aparecen en la declaración o forma del array. Para un array de 3 planos, 4 filas y 5 columnas, introduzca 3, 4 y 5. Después indique un índice de base cero por dimensión en ese mismo orden.
La coordenada del segundo plano, la tercera fila y la cuarta columna es 1, 2 y 3. Cada dimensión debe ser un entero positivo; cada índice debe ser igual o mayor que cero y menor que su dimensión. La calculadora rechaza rangos distintos y coordenadas fuera de límites para no generar silenciosamente una dirección ajena al array.
También debe indicar el tamaño real del elemento: por ejemplo, cuatro bytes para un entero habitual de 32 bits u ocho para un double. Si conoce el comienzo del array, escriba esa dirección base no negativa. Si no, conserve cero y lea el resultado como desplazamiento desde el inicio.
Comprenda el cálculo de pasos por filas
En el orden por filas, el último eje se almacena de forma contigua; avanzar una posición en él equivale a avanzar un elemento, por lo que su paso vale uno. El paso de cualquier eje anterior es el producto de todas las dimensiones situadas a su derecha. Con dimensiones 3 por 4 por 5, los pasos son 20, 5 y 1: cambiar de plano salta cuatro filas de cinco elementos, cambiar de fila salta cinco elementos y cambiar de columna salta uno.
La herramienta multiplica cada índice por el paso de su eje y muestra el producto como aportación. La suma proporciona el índice lineal. Para 1, 2 y 3, se calcula 1 por 20 más 2 por 5 más 3 por 1, cuyo resultado es 33.
Los valores intermedios permiten auditar la operación y detectar dimensiones invertidas o multiplicadores propios del orden por columnas. Toda la aritmética usa enteros comprobados; si un producto o suma supera el rango entero seguro de JavaScript, se devuelve un error en vez de una dirección redondeada.
Convierta el índice del elemento en una dirección de bytes
Un índice lineal cuenta elementos, no bytes. Para obtener el desplazamiento en bytes, multiplíquelo por el tamaño de cada elemento. El elemento 33, si cada elemento ocupa ocho bytes, comienza 264 bytes después del inicio.
La dirección final es ese desplazamiento sumado a la base indicada: con una base 4096, el elemento comienza en 4360. La respuesta mantiene separados índice lineal, desplazamiento, base y dirección para que usted pueda contrastar cada etapa con código fuente, un depurador, una especificación binaria o un búfer de GPU. Se devuelve un entero decimal exacto dentro del rango seguro; la herramienta no accede a memoria ni inspecciona procesos.
Se supone un array denso, contiguo y sin relleno entre filas o elementos. Las filas con pitch, dimensiones principales explícitas, vistas seccionadas y pasos personalizados requieren sus pasos físicos reales.
Qué puede hacer con ella
Comprobar aritmética de punteros
Verifique los desplazamientos de elementos y bytes usados en C, C++, Rust o WebAssembly antes de acceder a un búfer aplanado.
Depurar el aplanado de tensores
Compare los pasos y aportaciones por filas esperados con una biblioteca de tensores, un serializador o una rutina de intercambio.
Explicar la disposición en memoria
Muestre cómo cada coordenada multidimensional contribuye a una posición contigua y a su dirección final.
Preguntas frecuentes
¿Los índices comienzan en cero?
Sí. Cada índice parte de cero y debe ser menor que el tamaño de su dimensión.
¿Qué significa orden por filas?
Es una disposición contigua donde el último eje cambia con mayor rapidez, como en los arrays multidimensionales habituales de C.
¿Qué dirección base debo utilizar?
Indique la dirección en bytes donde comienza el array. Use cero si solo necesita un desplazamiento relativo al inicio.
¿Admite arrays ordenados por columnas?
No. El cálculo implementa expresamente el orden por filas; el almacenamiento por columnas necesita otra secuencia de pasos.
¿Incluye relleno de filas o pasos personalizados?
No. Supone elementos densos y contiguos. El almacenamiento con pitch, relleno, transposición o secciones necesita sus pasos físicos.
Herramientas relacionadas
Para desarrolladores — acceso por API
Todo lo de esta página está disponible por programación. Esta sección es para equipos que quieren integrarlo en sus sistemas; el resto puede usar la herramienta de arriba sin más.
Endpoint de API
¿Prefiere automatizarlo? Un POST autenticado crea la tarea; el resultado llega por webhook o enlace firmado. La misma capacidad también se ejecuta aquí en la web, por email y desde Telegram — y pronto también desde nuestra app.
Llámela desde su stack
curl -X POST https://api.kit.forhosting.com/dev/array-rowmajor-index \
-H "Authorization: Bearer $KIT_KEY" \
-H "Content-Type: application/json" \
-d '{"dimensions":[3,4,5],"indices":[1,2,3],"element_size_bytes":8}'const res = await fetch("https://api.kit.forhosting.com/dev/array-rowmajor-index", {
method: "POST",
headers: {
"Authorization": `Bearer ${process.env.KIT_KEY}`,
"Content-Type": "application/json"
},
body: JSON.stringify({
"dimensions": [
3,
4,
5
],
"indices": [
1,
2,
3
],
"element_size_bytes": 8
})
});
const { task_id } = await res.json();import os, requests
res = requests.post(
"https://api.kit.forhosting.com/dev/array-rowmajor-index",
headers={"Authorization": f"Bearer {os.environ['KIT_KEY']}"},
json={
"dimensions": [
3,
4,
5
],
"indices": [
1,
2,
3
],
"element_size_bytes": 8
},
)
task_id = res.json()["task_id"]<?php
$res = file_get_contents("https://api.kit.forhosting.com/dev/array-rowmajor-index", false, stream_context_create([
"http" => [
"method" => "POST",
"header" => "Authorization: Bearer " . getenv("KIT_KEY") . "\r\nContent-Type: application/json",
"content" => '{"dimensions":[3,4,5],"indices":[1,2,3],"element_size_bytes":8}',
],
]));
$task = json_decode($res, true);body := bytes.NewBufferString(`{"dimensions":[3,4,5],"indices":[1,2,3],"element_size_bytes":8}`)
req, _ := http.NewRequest("POST", "https://api.kit.forhosting.com/dev/array-rowmajor-index", body)
req.Header.Set("Authorization", "Bearer "+os.Getenv("KIT_KEY"))
req.Header.Set("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)Ejemplo de solicitud
{
"dimensions": [
3,
4,
5
],
"indices": [
1,
2,
3
],
"element_size_bytes": 8
}Ejemplo de respuesta
{
"task_id": "tsk_a1b2c3d4e5f6a1b2c3d4e5f6",
"type": "dev.array_rowmajor_index",
"status": "queued",
"_links": {
"result": "/tasks/tsk_…/result"
}
}La API es asíncrona: la llamada devuelve un task_id al instante y el resultado llega por webhook. El polling está limitado a 1 req/s por tarea.
Precio
Precio publicado — sin tokens ni créditos inventados. Una tarea fallida no se cobra.
Límites
max_dimensions | 32 |
Errores
| HTTP | Código | Significado |
|---|---|---|
401 | unauthorized | API key ausente o inválida. |
402 | insufficient_balance | El saldo no cubre el precio de la tarea. |
404 | unknown_type | El tipo de tarea no existe. |
429 | rate_limited | Demasiadas peticiones. Use el webhook en vez de sondear. |
Notas técnicas
Convierta el índice del elemento en una dirección de bytes
Cada solicitud a la API cuesta $0.002; para comprobaciones rápidas, el mismo cálculo determinista funciona en el navegador.
Preguntas técnicas
¿Cuánto cuesta mediante la API?
Cada solicitud cuesta $0.002. La versión del navegador ejecuta localmente el mismo cálculo determinista.