Betriebsumgebung
GeForce GTX 1070 (8GB)
ASRock Z170M Pro4S [Intel Z170chipset]
Ubuntu 14.04 LTS desktop amd64
TensorFlow v0.11
cuDNN v5.1 for Linux
CUDA v8.0
Python 2.7.6
IPython 5.1.0 -- An enhanced Interactive Python.
gcc (Ubuntu 4.8.4-2ubuntu1~14.04.3) 4.8.4
Ich möchte ein Bild des Koeffizienten anzeigen, der durch C ++ - Code mit Jupyter / matplotlib generiert wurde. Dazu lese ich wahrscheinlich das Ergebnis von C fwrite () in Python.
Ich habe versucht, es umzusetzen.
C (write)
writeTest.c
#include <stdio.h>
#include <stdlib.h>
int main(void){
FILE *wfp;
float pi = 3.141592;
wfp = fopen("sample.bin","wb");
fwrite(&pi, sizeof(float), 1, wfp);
fclose(wfp);
}
Python (read)
Referenz http://stackoverflow.com/questions/2146031/what-is-the-equivalent-of-fread-from-matlab-in-python
readTest.py
import numpy as np
import array
with open("sample.bin") as rfp:
a = array.array("f") # f: typecode for float
a.fromfile(rfp, 1)
print (a)
Der obige Typcode basiert auf dem Folgenden. https://docs.python.org/3.1/library/array.html
sample.bin Generation
$ gcc writeTest.c && ./a.out
read sample.bin
$ python readTest.py
array('f', [3.141592025756836])
Ich lese.
C (write)
writeTest.c
#include <stdio.h>
#include <stdlib.h>
int main(void){
FILE *wfp;
float pi = 3.141592;
float napier = 2.718;
float avogadro1 = 6.022;
wfp = fopen("sample.bin","wb");
fwrite(&pi, sizeof(float), 1, wfp);
fwrite(&napier, sizeof(float), 1, wfp);
fwrite(&avogadro1, sizeof(float), 1, wfp);
fclose(wfp);
}
Python (read)
readTest.py
import numpy as np
import array
with open("sample.bin","rb") as rfp:
a = array.array("f") # f: typecode for float
a.fromfile(rfp, 3)
print (a)
sample.bin Generation
$ gcc writeTest.c && ./a.out
read sample.bin
$ python readTest.py
array('f', [3.141592025756836, 2.7179999351501465, 6.021999835968018])
(Ergänzung 19.12.2016)
Ich bin beim Lesen des Typs size_t gestolpert. v0.1 @ http://qiita.com/7of9/items/68673ac3239532064c28
sizeofPrint.c
#include <stdio.h>
#include <stdlib.h>
int main(void) {
printf("%ld\n", sizeof(size_t));
printf("%ld\n", sizeof(int));
}
Lauf
$ gcc sizeofPrint.c && ./a.out
8
4
In dieser Umgebung ist "size_t" 8.
C (write)
writeTest.c
#include <stdio.h>
#include <stdlib.h>
int main(void){
FILE *wfp;
size_t pi = 314;
float napier = 2.718;
float avogadro1 = 6.022;
wfp = fopen("sample.bin","wb");
fwrite(&pi, sizeof(size_t), 1, wfp);
fwrite(&napier, sizeof(float), 1, wfp);
fwrite(&avogadro1, sizeof(float), 1, wfp);
fclose(wfp);
}
Python (read)
Um den Wert von size_t (sizeof () = 8) auf der Python-Seite zu lesen, wäre dies der Typ [unsigned long].
https://docs.python.org/3.1/library/array.html
Nach L
readTest.py
import numpy as np
import array
with open("sample.bin","rb") as rfp:
szv = array.array("L") # L: typecodef for [unsigned long]
szv.fromfile(rfp, 1)
print (szv)
flv = array.array("f") # f: typecode for float
flv.fromfile(rfp, 2)
print (flv)
Lauf
$ python readTest.py
array('L', [314L])
array('f', [2.7179999351501465, 6.021999835968018])
(Ergänzung 2016/12/20)
Wie lese ich den Typ mit dem doppelten Komplex? Ich habe es vorerst als Doppeltyp gelesen.
C (write)
Es unterscheidet sich vom tatsächlichen Wert der Abogadro-Zahl, aber vorerst.
writeTest.c
#include <stdio.h>
#include <stdlib.h>
#include <complex.h>
int main(void){
FILE *wfp;
size_t pi = 314;
float napier = 2.718;
double complex avogadro = 6.022 + 10.23 * I;
wfp = fopen("sample.bin","wb");
fwrite(&pi, sizeof(size_t), 1, wfp);
fwrite(&napier, sizeof(float), 1, wfp);
fwrite(&avogadro, sizeof(double complex), 1, wfp);
fclose(wfp);
}
Python (read)
readTest.py
import numpy as np
import array
with open("sample.bin","rb") as rfp:
szv = array.array("L") # L: typecodef for [unsigned long]
szv.fromfile(rfp, 1)
print (szv)
napier = array.array("f") # f: typecode for float
napier.fromfile(rfp, 1)
print (napier)
avogadro = array.array("d") # d: typecode for double
avogadro.fromfile(rfp, 2) # real and imaginary part of the complex number
print (avogadro)
Lauf
$ gcc writeTest.c && ./a.out
$ python readTest.py
array('L', [314L])
array('f', [2.7179999351501465])
array('d', [6.022, 10.23])
Vorläufig konnte ich den Realteil und den Imaginärteil des Doppelkomplexes lesen. Ist es eine Methode wie das Umwandeln in einen komplexen Typ, der auf den beiden Werten basiert?
Recommended Posts