Seite 1 von 1

Doku eines Numpy-Arrays mit großen Zeilenbreite

Verfasst: Sonntag 22. August 2021, 17:06
von Erhy
Hallo!

Ich programmiere mit VS Code und
wollte im Debug-Fenster ein Array mit der Ausnutzung einer großen Zeilenbreite dokumentieren,
womöglich den Ausdruck in eine Datei schreiben.

Wäre die Numpy Funktion set_printoptions von Nutzen?

Wie geht das?

Danke für euren Rat
Erhy

Re: Doku eines Numpy-Arrays mit großen Zeilenbreite

Verfasst: Sonntag 22. August 2021, 20:25
von rogerb
@Erhy,

Ich bin mir nicht ganz sicher, ob ich die Frage richtig verstanden habe.

VS Code hat einen eingebauten Data Viewer für Numpy Arrays und Pandas Dataframes.
Er ist erreichbar, nachdem ein Breakpoint im Debug-Modus erreicht wurde.
Im Aktivity Bar unter "Run and Debug", "Variables" aufklappen. Rechtsklick auf das Numpy Array und dann "View Value in Data Viewer"

Der hat einige nette Funktionen, ähnlich wie in PyCharm.
Ist auch hier beschrieben:
https://code.visualstudio.com/docs/data ... e-tutorial

Re: Doku eines Numpy-Arrays mit großen Zeilenbreite

Verfasst: Dienstag 24. August 2021, 14:33
von Erhy
Danke für den Beitrag.
Habe Jupyter Notebook deinstalliert, da mir der Vorteil nicht bewusst war.
Nun habe ich einen Beautifier für mein RGB-image Array geschrieben.
Wenn ich das Array mit print() anschaue bekomme ich z.B.

Code: Alles auswählen

[[[  6   7   8]
  [  9  10  11]
  [ 12  13  14]
  [255 255 255]
  [255 255 255]]

 [[ 21  22  23] ...
Mit dieser Funktion

Code: Alles auswählen

def p_arr(a) :
	import re
	li = []
	for i in range( a.shape[0] ) :
		li.append( ''.join( \
			( np.array2string( a[i], max_line_width=np.inf, separator=',').split('\n'))) )
	z = np.array(li)
	x = np.array2string( z, max_line_width=np.inf, separator=',')
	p_beg = re.compile("\['")
	x0 = p_beg.sub('[\n',x)
	pEnd = re.compile("'\]")
	x1 = pEnd.sub('\n]',x0)
	pAgain = re.compile("','")
	x2 = pAgain.sub(',\n',x1)
	# print(x2)
	return x2 # to print in debug window
erhalte ich mit print( p_arr( arr )

Code: Alles auswählen

[
[[  6,  7,  8], [  9, 10, 11], [ 12, 13, 14], [255,255,255], [255,255,255]],
[[ 21, 22, 23], [ 24, 25, 26], [ 27, 28, 29], [255,255,255], [255,255,255]],
[[ 36, 37, 38], [ 39, 40, 41], [ 42, 43, 44], [255,255,255], [255,255,255]],
[[ 51, 52, 53], [ 54, 55, 56], [ 57, 58, 59], [255,255,255], [255,255,255]],
[[ 66, 67, 68], [ 69, 70, 71], [ 72, 73, 74], [255,255,255], [255,255,255]],
[[ 81, 82, 83], [ 84, 85, 86], [ 87, 88, 89], [255,255,255], [255,255,255]]
]
Erhy

Re: Doku eines Numpy-Arrays mit großen Zeilenbreite

Verfasst: Dienstag 24. August 2021, 15:03
von rogerb
@Erhy,

Wenn das das ist was du gesucht hast, gut. Aber ich meint etwas anderes. Der "Data Viewer" ist ein Feature der grafischen Benutzeroberfkäche on VS Code.
Man kann damit auch filtern und "slicen"

Re: Doku eines Numpy-Arrays mit großen Zeilenbreite

Verfasst: Dienstag 24. August 2021, 18:03
von __blackjack__
@Erhy: Auf der Zeichenkettenrepräsentation von Datentypen rumbasteln, und dann auch noch mit regulären Ausdrücken für die man gar keine regulären Ausdrücke gebraucht hätte, weil die einfach nur statische Teile ersetzen, ist nicht wirklich gut. Vorsichtig ausgedrückt.

Wenn Du eine eigene Zeichenkettendarstellung willst, dann schreib Code der die *aufbaut* und keinen der eine auch noch mehr als einmal zwischen Arrays und Zeichenketten hin und her wandelt und darauf einprügelt bis es passt.

Re: Doku eines Numpy-Arrays mit großen Zeilenbreite

Verfasst: Dienstag 24. August 2021, 19:19
von Erhy
rogerb hat geschrieben: Dienstag 24. August 2021, 15:03 @Erhy,

Der "Data Viewer" ist ein Feature der grafischen Benutzeroberfkäche on VS Code.
Man kann damit auch filtern und "slicen"
Habe ich noch nicht entdeckt,
ich verwendete bis jetzt nur das Debug Fenster
und die Variable Auflistung.

Re: Doku eines Numpy-Arrays mit großen Zeilenbreite

Verfasst: Dienstag 24. August 2021, 22:39
von rogerb
Habe ich noch nicht entdeckt,
Der Data Viewer ist auch nur im Debug-Modus und auch nur numpy arrays und pandas dataframes sichtbar.
Es lohnt sich aber danach zu suchen, denn man bekommt innerhalb von VS Code eine Excel ähnliche Darstellung in der man beliebig scrollen, filtern und slicen kann.

Re: Doku eines Numpy-Arrays mit großen Zeilenbreite

Verfasst: Mittwoch 25. August 2021, 13:37
von Erhy
ist mir jetzt gelungen
habe in meiner Python Installation mit pip
pandas und jupyter hinzugefügt.
Dann VS Code neu gestartet und die Extension
Jupyter notebook support
hinzugefügt.
Nun kann ich
View Value in Data Viewer anwählen.

Wie ein .ipynb zu gebrauchen ist, weiß ich noch nicht.

Erhy

Re: Doku eines Numpy-Arrays mit großen Zeilenbreite

Verfasst: Mittwoch 25. August 2021, 13:52
von rogerb
Wie ein .ipynb zu gebrauchen ist, weiß ich noch nicht.
Du kannst ihn auch beim normalen Debuggen einsetzen. Man braucht kein .ipynb Notebook um den Data Viewer zu nutzen.

Wenn du dir ein numpy Array im Data Viewer anschauen willst, musst du nur einen Breakpoint in die entsprechende folgende Zeile setzen und im Sidebar unter Debug , Variablen die entsprechende Variable finden, Rechtsclick, "View Value in Data Viewer"

Re: Doku eines Numpy-Arrays mit großen Zeilenbreite

Verfasst: Mittwoch 25. August 2021, 17:43
von Erhy
danke, ja das funktioniert

Re: Doku eines Numpy-Arrays mit großen Zeilenbreite

Verfasst: Donnerstag 26. August 2021, 11:40
von __blackjack__
Die Ausgabe mal systematisch aufgebaut statt mit Zeichenkettenoperationen auf Repräsentation von Datenstrukturen hingebogen:

Code: Alles auswählen

#!/usr/bin/env python3
import numpy as np


def convert_to_text(image_data):
    return "[\n{}\n]".format(
        ",\n".join(
            "[{}]".format(
                ", ".join(
                    "[{}]".format(
                        ",".join(f"{component:3d}" for component in pixel)
                    )
                    for pixel in row
                )
            )
            for row in image_data
        )
    )


def main():
    image_data = np.array(
        [
            [
                [6, 7, 8],
                [9, 10, 11],
                [12, 13, 14],
                [255, 255, 255],
                [255, 255, 255],
            ],
            [
                [21, 22, 23],
                [24, 25, 26],
                [27, 28, 29],
                [255, 255, 255],
                [255, 255, 255],
            ],
            [
                [36, 37, 38],
                [39, 40, 41],
                [42, 43, 44],
                [255, 255, 255],
                [255, 255, 255],
            ],
            [
                [51, 52, 53],
                [54, 55, 56],
                [57, 58, 59],
                [255, 255, 255],
                [255, 255, 255],
            ],
            [
                [66, 67, 68],
                [69, 70, 71],
                [72, 73, 74],
                [255, 255, 255],
                [255, 255, 255],
            ],
            [
                [81, 82, 83],
                [84, 85, 86],
                [87, 88, 89],
                [255, 255, 255],
                [255, 255, 255],
            ],
        ],
        dtype=np.uint8,
    )
    print(convert_to_text(image_data))


if __name__ == "__main__":
    main()