Doku eines Numpy-Arrays mit großen Zeilenbreite

mit matplotlib, NumPy, pandas, SciPy, SymPy und weiteren mathematischen Programmbibliotheken.
Antworten
Erhy
User
Beiträge: 64
Registriert: Mittwoch 2. Januar 2019, 21:09

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
rogerb
User
Beiträge: 878
Registriert: Dienstag 26. November 2019, 23:24

@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
Erhy
User
Beiträge: 64
Registriert: Mittwoch 2. Januar 2019, 21:09

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
rogerb
User
Beiträge: 878
Registriert: Dienstag 26. November 2019, 23:24

@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"
Benutzeravatar
__blackjack__
User
Beiträge: 13003
Registriert: Samstag 2. Juni 2018, 10:21
Wohnort: 127.0.0.1
Kontaktdaten:

@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.
“Most people find the concept of programming obvious, but the doing impossible.” — Alan J. Perlis
Erhy
User
Beiträge: 64
Registriert: Mittwoch 2. Januar 2019, 21:09

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.
rogerb
User
Beiträge: 878
Registriert: Dienstag 26. November 2019, 23:24

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.
Erhy
User
Beiträge: 64
Registriert: Mittwoch 2. Januar 2019, 21:09

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
rogerb
User
Beiträge: 878
Registriert: Dienstag 26. November 2019, 23:24

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"
Erhy
User
Beiträge: 64
Registriert: Mittwoch 2. Januar 2019, 21:09

danke, ja das funktioniert
Benutzeravatar
__blackjack__
User
Beiträge: 13003
Registriert: Samstag 2. Juni 2018, 10:21
Wohnort: 127.0.0.1
Kontaktdaten:

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()
“Most people find the concept of programming obvious, but the doing impossible.” — Alan J. Perlis
Antworten