Tengo una serie de flotadores y me gustaría convertirlo en una matriz de dobles en Java. Soy consciente de la forma obvia de iterar sobre la matriz y crear una nueva. Esperaba que Java dijera un flotador [] sin problemas donde desea trabajar con doble [] ... pero no puede funcionar con esto. ¿Cuál es la forma elegante y efectiva de hacer esta conversión?Cómo convertir una matriz de flotantes a una matriz de dobles en Java?
Respuesta
Básicamente algo tiene que hacer la conversión de cada valor. No hay una conversión implícita entre los dos tipos de matriz porque el código utilizado para manejarlos después de JITting sería diferente: tienen un tamaño de elemento diferente y el flotante necesitaría una conversión, mientras que el doble no. Compare esto con la covarianza de matriz para tipos de referencia, donde no se requieren conversiones al leer los datos (el patrón de bits es el mismo para una referencia de cadena como referencia de objeto, por ejemplo) y el tamaño del elemento es el mismo para todos los tipos de referencia.
En resumen, algo tendrá que realizar las conversiones en un bucle. No conozco ningún método incorporado para hacer esto. Estoy seguro de que existen en bibliotecas de terceros en alguna parte, pero a menos que ya estés usando una de esas bibliotecas, solo escribiría tu propio método. Por razones de conveniencia, aquí hay un ejemplo de implementación:
public static double[] convertFloatsToDoubles(float[] input)
{
if (input == null)
{
return null; // Or throw an exception - your choice
}
double[] output = new double[input.length];
for (int i = 0; i < input.length; i++)
{
output[i] = input[i];
}
return output;
}
También podría convertirlo en un método de extensión. – Seth
@Seth: Esto es Java, no C#. –
Puede ponerle el nombre 'convertToDoubles' o' toDoubles' y proporcionar sobrecargas para otros tipos primitivos (y encuadrados). –
¿Es usted realmente necesita para copiar su red de flotadores a una matriz doble? Si usted está teniendo problemas con el compilador y los tipos cuando se usan los flotadores que puede utilizar este ...
float x = 0;
double d = Double.valueOf(x);
¿Qué ventaja se obtiene mediante la adopción de una copia? Si necesita una mayor precisión en los resultados de los cálculos basados en los flotadores, haga los resultados double
. Puedo ver bastantes inconvenientes para tener una copia de la matriz y realizar la función de copia, especialmente si es grande. Asegúrate de que realmente necesites hacerlo.
HTH
Veo una razón muy obvia: llamar a un método que necesita 'doble []' mientras tiene sus datos en 'float []'. –
obviamente, pero el OP no menciona eso. Solo quería dar una alternativa ya que él lo pidió. – Simon
Andreas_D lo explicó. Necesitaba hacer dos bibliotecas para jugar entre ellas. Uno de ellos funciona con vectores dobles [], el otro con float [] (vector en el significado matemático). Los problemas de Java con las matrices de transmisión, la coincidencia de estas bibliotecas no es tan simple. Parece que no existe ninguna solución sin la necesidad de recorrer el conjunto. Gracias por la respuesta. – fifigyuri
En Java 8 se puede, si realmente quieren, hacer:
IntStream.range(0, floatArray.length).mapToDouble(i -> floatArray[i]).toArray();
Pero es mejor (más limpio, más rápido, mejor semántica) para utilizar la función de Jon Skeet.
No creo que Jon Skeet sea mejor. De hecho, este podría ser optimizado mucho más rápido y hecho en paralelo.Está claro lo que está sucediendo y bien podría convertirse en el equivalente funcional de (double []) floatArray. La razón para usar streams es para que le diga al compilador que no nos importa cómo se hace o en qué orden, simplemente asigne todos estos valores a estos otros. En lugar de recorrerlos externamente. – Tatarize
- 1. ¿Cómo convertir una matriz a una Tupla?
- 2. ¿Cómo convertir una matriz de bytes a una matriz int?
- 3. Transmisión de una matriz de caracteres sin signo a una matriz de flotantes
- 4. ¿Cómo convertir una matriz simple a una matriz asociativa?
- 5. Cómo convertir una matriz de bytes en una matriz int?
- 6. Convertir una matriz int a una matriz de cadenas
- 7. convertir una matriz de listas a una matriz regular
- 8. Conversión de una matriz de bytes en una matriz de flotantes
- 9. Cómo convertir matriz bidimensional a una matriz unidimensional en php5
- 10. ¿Puede una matriz contener enteros y flotantes?
- 11. Convertir una matriz de cadenas a matriz de bytes
- 12. función para convertir una matriz a una matriz asociativa
- 13. convertir una matriz FileInfo en una matriz de cadenas C#
- 14. Swig, devolviendo una matriz de dobles
- 15. ¿Cómo convertir contenido STDIN a una matriz?
- 16. Eficiencia: ¿Crear una matriz de dobles incrementalmente?
- 17. Cómo convertir una matriz de escala de grises a una matriz RGB en MATLAB?
- 18. Convertir una matriz 1D en una matriz 2D en numpy
- 19. ¿Cómo convertir una matriz a una cadena en PHP?
- 20. Convertir una matriz de bytes a una clase que contiene una matriz de bytes en C#
- 21. Algoritmo para convertir una matriz multidimensional en una matriz unidimensional
- 22. Convertir una matriz numpy 2D en una matriz estructurada
- 23. ¿Cómo convertir una referencia de matriz a una matriz en Perl?
- 24. Convertir matriz int a matriz de caracteres
- 25. Convertir PHP cadena de matriz en una matriz
- 26. Conversión de matriz de cadenas en matriz de flotantes
- 27. Cómo convertir lista enlazada a una matriz usando `toArray()`?
- 28. ¿Cómo convertir una matriz de caracteres a una matriz de cadenas?
- 29. Convertir una matriz multidimensional en una matriz unidimensional
- 30. ¿Cómo convertir una matriz asociativa en python?
No hay forma de hacerlo "elegantemente" porque flotante y doble son tipos de datos totalmente diferentes por tamaño y patrón de bits. Entonces, la forma obvia es la única. –