Dado un búfer de bytes, DTYPE, forma y avances, cómo crear ndary ndarray -- python campo con arrays campo con numpy campo con multidimensional-array campo con buffer camp Relacionados El problema

Given a byte buffer, dtype, shape and strides, how to create Numpy ndarray


8
vote

problema

Español

Tengo un tampón, DTYPE, forma y avances. Quiero crear un ndarray nombrado que reutiliza la memoria del búfer.

Hay numpy.frombuffer que crea una matriz 1D de un búfer y reutiliza la memoria. Sin embargo, no estoy seguro de si puedo remodelarlo fácil y de forma segura y configurar los avances.

Hay la <html> <head> <meta charset="utf-8"> <title>Fine Uploader Demo</title> <link href="fineuploader-3.4.1.css" rel="stylesheet"> </head> <body> <div id="fine-uploader"></div> <script src="jquery-1.7.2.min.js"></script> <script src="jquery.fineuploader-3.4.1.js"></script> <script> function createUploader() { var uploader = new qq.FineUploader({ // Pass the HTML element here element: document.getElementById('fine-uploader'), // or, if using jQuery // element: $('#fine-uploader')[0], // Use the relevant server script url here // if it's different from the default "/server/upload" request: { endpoint: 'qqFileUploader' } }); } window.onload = createUploader; </script> </body> </html> 0 constructor que puede referirse a un búfer pero no estoy seguro de si reutilizará la memoria o si lo copiará (no está claro en la documentación).

Entonces, ¿el constructor <html> <head> <meta charset="utf-8"> <title>Fine Uploader Demo</title> <link href="fineuploader-3.4.1.css" rel="stylesheet"> </head> <body> <div id="fine-uploader"></div> <script src="jquery-1.7.2.min.js"></script> <script src="jquery.fineuploader-3.4.1.js"></script> <script> function createUploader() { var uploader = new qq.FineUploader({ // Pass the HTML element here element: document.getElementById('fine-uploader'), // or, if using jQuery // element: $('#fine-uploader')[0], // Use the relevant server script url here // if it's different from the default "/server/upload" request: { endpoint: 'qqFileUploader' } }); } window.onload = createUploader; </script> </body> </html> 1111 haga lo que quiero? O ¿qué puedo usar en su lugar?


OK, así que estoy tratando de averiguarme ahora mismo, lo que realmente está haciendo el constructor <html> <head> <meta charset="utf-8"> <title>Fine Uploader Demo</title> <link href="fineuploader-3.4.1.css" rel="stylesheet"> </head> <body> <div id="fine-uploader"></div> <script src="jquery-1.7.2.min.js"></script> <script src="jquery.fineuploader-3.4.1.js"></script> <script> function createUploader() { var uploader = new qq.FineUploader({ // Pass the HTML element here element: document.getElementById('fine-uploader'), // or, if using jQuery // element: $('#fine-uploader')[0], // Use the relevant server script url here // if it's different from the default "/server/upload" request: { endpoint: 'qqFileUploader' } }); } window.onload = createUploader; </script> </body> </html> 2 . El código es aquí . Utiliza <html> <head> <meta charset="utf-8"> <title>Fine Uploader Demo</title> <link href="fineuploader-3.4.1.css" rel="stylesheet"> </head> <body> <div id="fine-uploader"></div> <script src="jquery-1.7.2.min.js"></script> <script src="jquery.fineuploader-3.4.1.js"></script> <script> function createUploader() { var uploader = new qq.FineUploader({ // Pass the HTML element here element: document.getElementById('fine-uploader'), // or, if using jQuery // element: $('#fine-uploader')[0], // Use the relevant server script url here // if it's different from the default "/server/upload" request: { endpoint: 'qqFileUploader' } }); } window.onload = createUploader; </script> </body> </html> 3 para convertir el argumento del búfer. Luego llamará <html> <head> <meta charset="utf-8"> <title>Fine Uploader Demo</title> <link href="fineuploader-3.4.1.css" rel="stylesheet"> </head> <body> <div id="fine-uploader"></div> <script src="jquery-1.7.2.min.js"></script> <script src="jquery.fineuploader-3.4.1.js"></script> <script> function createUploader() { var uploader = new qq.FineUploader({ // Pass the HTML element here element: document.getElementById('fine-uploader'), // or, if using jQuery // element: $('#fine-uploader')[0], // Use the relevant server script url here // if it's different from the default "/server/upload" request: { endpoint: 'qqFileUploader' } }); } window.onload = createUploader; </script> </body> </html> 4 que se puede ver aquí . Si se pasan los datos allí, lo hará <html> <head> <meta charset="utf-8"> <title>Fine Uploader Demo</title> <link href="fineuploader-3.4.1.css" rel="stylesheet"> </head> <body> <div id="fine-uploader"></div> <script src="jquery-1.7.2.min.js"></script> <script src="jquery.fineuploader-3.4.1.js"></script> <script> function createUploader() { var uploader = new qq.FineUploader({ // Pass the HTML element here element: document.getElementById('fine-uploader'), // or, if using jQuery // element: $('#fine-uploader')[0], // Use the relevant server script url here // if it's different from the default "/server/upload" request: { endpoint: 'qqFileUploader' } }); } window.onload = createUploader; </script> </body> </html> 5 .

Original en ingles

I have a buffer, dtype, shape and strides. I want to create a Numpy ndarray which reuses the memory of the buffer.

There is numpy.frombuffer which creates a 1D array from a buffer and reuses the memory. However, I'm not sure if I can easily and safely reshape it and set the strides.

There is the numpy.ndarray constructor which can refer to a buffer but I'm not sure if it will reuse the memory or if it will copy it (it's not clear from the documentation).

So, will the numpy.ndarray constructor do what I want? Or what can I use instead?


Ok, so I'm trying to figure out myself now what the numpy.ndarray constructor is really doing. The code is here. It uses PyArray_BufferConverter to convert the buffer argument. Then it will call PyArray_NewFromDescr_int which can be seen here. If data is passed in there, it will fa->flags &= ~NPY_ARRAY_OWNDATA;.

              
   
   

Lista de respuestas

3
 
vote
vote
La mejor respuesta
 

Como se mencionó en el comentario de @hpaulj, puede lograr esto utilizando el módulo STRIDE_TRICKS. Necesita ambos DefaultComboBoxModel model = new DefaultComboBoxModel(); forEachRowInResultSet { model.addElement(resultSet.getString(2)); } 6 y DefaultComboBoxModel model = new DefaultComboBoxModel(); forEachRowInResultSet { model.addElement(resultSet.getString(2)); } 7 :

Recopilar datos de la matriz NUTPY

  DefaultComboBoxModel model = new DefaultComboBoxModel(); forEachRowInResultSet {     model.addElement(resultSet.getString(2)); }  8  

Recrear Array Numpy

  DefaultComboBoxModel model = new DefaultComboBoxModel(); forEachRowInResultSet {     model.addElement(resultSet.getString(2)); }  9  

Verificar resultados

  Object one = model.getElementAt(index); Object other = model.getElementAt(index) if (!one.equals(other)) {    listener must have received a contentsChanged }  0  
 

As mentioned in the comment by @hpaulj, you can accomplish this using the stride_tricks module. You need both np.frombuffer and np.lib.stride_tricks.as_strided:

Gather data from NumPy array

In [1]: import numpy as np In [2]: x = np.random.random((3, 4)).astype(dtype='f4') In [3]: buffer = x.data In [4]: dtype = x.dtype In [5]: shape = x.shape In [6]: strides = x.strides 

Recreate NumPy array

In [7]: xx = np.frombuffer(buffer, dtype) In [8]: xx = np.lib.stride_tricks.as_strided(xx, shape, strides) 

Verify results

In [9]: x Out[9]:  array([[ 0.75343359,  0.20676662,  0.83675659,  0.99904215],        [ 0.37182721,  0.83846378,  0.6888299 ,  0.57195812],        [ 0.39905572,  0.7258808 ,  0.88316005,  0.2187883 ]], dtype=float32)  In [10]: xx Out[10]:  array([[ 0.75343359,  0.20676662,  0.83675659,  0.99904215],        [ 0.37182721,  0.83846378,  0.6888299 ,  0.57195812],        [ 0.39905572,  0.7258808 ,  0.88316005,  0.2187883 ]], dtype=float32)  In [11]: x.strides Out[11]: (16, 4) In [12]: xx.strides Out[12]: (16, 4) 
 
 
2
 
vote

Me quedo con Object one = model.getElementAt(index); Object other = model.getElementAt(index) if (!one.equals(other)) { listener must have received a contentsChanged } 1 porque está destinado directamente para este propósito, y deja claro lo que está haciendo. Aquí hay un ejemplo:

  Object one = model.getElementAt(index); Object other = model.getElementAt(index) if (!one.equals(other)) {    listener must have received a contentsChanged }  2  

¿Hay algo que necesites que esto no lo hace?

 

I'd stick with frombuffer because it's intended directly for this purpose, and makes it clear what you're doing. Here's an example:

In [58]: s0 = 'aaaa'   # a single int32  In [59]: s1 = 'aaabaaacaaadaaae'  # 4 int32s, each increasing by 1  In [60]: a0 = np.frombuffer(s0, dtype='>i4', count=1)   # dtype sets the stride  In [61]: print a0 [1633771873]  In [62]: a1 = np.frombuffer(s, dtype='>i4', count=4)  In [63]: print a1 [1633771874 1633771875 1633771876 1633771877]  In [64]: a2 = a1.reshape((2,2))   # do a reshape, which also sets the strides  In [65]: print a2 [[1633771874 1633771875]  [1633771876 1633771877]]  In [66]: a2 - a0     # do some calculation with the reshape Out[66]:  array([[1, 2],        [3, 4]], dtype=int32) 

Is there something you need that this doesn't do?

 
 
     
     
2
 
vote

Usted podría usar cualquiera de ellos, ninguno de ellos generará una copia:

  Object one = model.getElementAt(index); Object other = model.getElementAt(index) if (!one.equals(other)) {    listener must have received a contentsChanged }  3  

Tenga en cuenta que ni la matriz se puede modificar en su lugar, ya que están respaldados por la memoria de solo lectura:

  Object one = model.getElementAt(index); Object other = model.getElementAt(index) if (!one.equals(other)) {    listener must have received a contentsChanged }  4  
 

You could use either method - neither of them will generate a copy:

s = b'aaabaaacaaadaaae' a1 = np.frombuffer(s, np.int32, 4).reshape(2, 2) a2 = np.ndarray((2, 2), np.int32, buffer=s)  print(a1.flags.owndata, a1.base.tostring()) # (False, b'aaabaaacaaadaaae') print(a2.flags.owndata, a2.base) # (False, b'aaabaaacaaadaaae') 

Note that neither array can be modified in place, since they are backed by read-only memory:

a1[:] = 0  # ValueError: assignment destination is read-only 
 
 
   
   

Relacionados problema

0  Tampón de matriz C # C #  ( C sharp string array buffer ) 
Estoy construyendo una solicitud para mi hermano que toma una entrada de cadena forma una fuente externa, un plotter GPS, que me gustaría mostrar en un cuadro...

55  ¿Por qué Ruby no tiene un verdadero stringBuffer o Stringio?  ( Why doesnt ruby have a real stringbuffer or stringio ) 
Recientemente leí un bonito POST En el uso de StringIO en Ruby. Sin embargo, lo que el autor no menciona, es que StringIO es solo un "I". No hay "O". Us...

12  ¿Se inicializan los buffers directos en Java a un valor predeterminado como matrices?  ( Are direct buffers in java initialized to a default value like arrays ) 
Cuando inicializo una matriz en Java como: id4 Todos los elementos se inicializan a 0. Es también el caso cuando asigna un búfer directo como este: i...

1  Edge.js pasando tampón a la devolución de llamada  ( Edge js passing buffer to callback ) 
Estoy usando Edge.js para ejecutar módulos node.js dentro de mi código F #. Mi módulo de nodos devuelve la secuencia y he encontrado, que debería presumirlo c...

2  ¿Cuál es el tamaño de tampón promedio común para InternetReadFile?  ( Which is the common average buffer size for internetreadfile ) 
Utilizo wininet.h en Delphi para descargar archivos a través de HTTP con el tamaño promedio entre 30 KB y 1.5 MB. var Buf: array[0..BUFFER_SIZE - 1] of B...

0  Escribir función: ¿Hay alguna manera de escribir solo una parte del búfer?  ( Write function is there a way to write only a part of the buffer ) 
Estoy aprendiendo a usar la función de escritura y estoy tratando de imprimir solo una parte de una matriz de caracteres de búfer. Así que parece esto: cha...

0  ¿Cuál es el tamaño de búfer predeterminado de CreateFile en Windows?  ( What is the default buffer size of createfile in windows ) 
Cuando se llama Función de CreateFile sin la bandera File_FLAG_NO_BULHFERING, ¿Cuál es el tamaño del búfer interno del sistema operativo? Si mi tamaño de bú...

4  ¿Cómo escribes el final de un archivo abierto con File_Flag_NO_Buffering?  ( How do you write the end of a file opened with file flag no buffering ) 
Estoy usando VB6 y la API de Win32 para escribir datos a un archivo, esta funcionalidad es para la exportación de datos, por lo que el rendimiento de escritur...

0  System.ObjectDisposiciónException UWP  ( System objectdisposedexception uwp ) 
Tengo un problema en mi solicitud. Estoy tratando de enviar una imagen al servidor FTP. Soy capaz de conectarme con el servidor, autenticar y otros. Pero cuan...

0  C # transmitiendo video sobre NetworkStream / tcpclient  ( C sharp streaming video over networkstream tcpclient ) 
Estoy enviando un video de video desde un programa de Xbox Kinect desde un programa cliente a un servidor. Tengo todo funcionando, pero el problema es la velo...




© 2022 respuesta.top Reservados todos los derechos. Centro de preguntas y respuestas reservados todos los derechos