Wie kann ich eine numpy nDarray von Ganzzahlwerten effizienter konsolidieren?Python

Python-Programme
Anonymous
 Wie kann ich eine numpy nDarray von Ganzzahlwerten effizienter konsolidieren?

Post by Anonymous »

Ich entschuldige mich dafür, dass ich zu viele Informationen aufgenommen habe.

Code: Select all

arrayCurveLocations
ist ein unsortiertes nDarray mit Paaren von ganzzahligen Zahlen: Kurvelocations und desticalCrosssings . Neu erstelltes nDarray muss nicht sortiert werden. Das folgende Beispiel aus den DOCs rekonstruiert das ursprüngliche NDarray mit dem Array der einzigartigen Werte und des Arrays von "inversen Indizes". Das Indices-Einweis Das Array der einzigartigen Elemente.

Code: Select all

numpy.unique(ar, return_index=False, return_inverse=False, return_counts=False, axis=None,
*, equal_nan=True, sorted=True)

# Reconstruct the input array from the unique values and inverse:

>>> a = np.array([1, 2, 6, 4, 2, 3, 2])
>>> u, indices = np.unique(a, return_inverse=True)
>>> u
array([1, 2, 3, 4, 6])
>>> indices
array([0, 1, 4, 3, 1, 2, 1])
>>> u[indices]
array([1, 2, 6, 4, 2, 3, 2])
< /code>
Wenn ich ein Array von Indizes hätte, die das ursprüngliche Array abonniert haben, würde das Folgende funktionieren.def aggregateCurveLocations(arrayCurveLocations: DataArray2columns) -> DataArray3columns:
u, indices4arrayCurveLocations = np.unique(arrayCurveLocations, return_fantasy_indices = True)
...
consolidatedDistinctCrossings = np.add.reduceat(arrayCurveLocations, indices4arrayCurveLocations)
< /code>
 Ich glaube, ich fehlt ein grundlegendes Konzept < /h1>
Ich versuche, durch Konsolidierung zu deduplikieren, oder? Aber die Sortierreihenfolge ist irrelevant. "Wenn es Duplikate gibt, fügen Sie sie zusammen", scheint eine einfache Aufgabe zu sein, so dass ich etwas übersehen oder etwas missverstanden. class = "Lang-Py PrettyPrint-Override">from mapFolding.algorithms.oeisIDbyFormula import A000682
for n in range(3,40):
print(A000682(n))
< /code>
type DataArray2columns = numpy.ndarray[tuple[int, ...], numpy.dtype[numpy.uint64]]
type DataArray3columns = numpy.ndarray[tuple[int, ...], numpy.dtype[numpy.uint64]]

columnsArrayCurveGroups = columnsArrayTotal = 3
columnΩ: int = (columnsArrayTotal - columnsArrayTotal) - 1  # Something _feels_ right about this instead of `= -1`.
columnDistinctCrossings = columnΩ = columnΩ + 1
columnGroupAlpha = columnΩ = columnΩ + 1
columnGroupZulu = columnΩ = columnΩ + 1
if columnΩ != columnsArrayTotal - 1:
message = f"Please inspect the code above this `if` check. '{columnsArrayTotal = }', therefore '{columnΩ = }' must be '{columnsArrayTotal - 1 = }' due to 'zero-indexing.'"
raise ValueError(message)
del columnsArrayTotal, columnΩ

columnsArrayCurveLocations = columnsArrayTotal = 2
columnΩ: int = (columnsArrayTotal - columnsArrayTotal) - 1
columnDistinctCrossings = columnΩ = columnΩ + 1
columnCurveLocations = columnΩ = columnΩ + 1
if columnΩ != columnsArrayTotal - 1:
message = f"Please inspect the code above this `if` check. '{columnsArrayTotal = }', therefore '{columnΩ = }' must be '{columnsArrayTotal - 1 = }' due to 'zero-indexing.'"
raise ValueError(message)
del columnsArrayTotal, columnΩ

def aggregateCurveLocations(arrayCurveLocations: DataArray2columns) -> DataArray3columns:
arrayCurveGroups: DataArray3columns = numpy.tile(
A=numpy.unique(arrayCurveLocations[:, columnCurveLocations])
, reps=(columnsArrayCurveGroups, 1)
).T
arrayCurveGroups[:, columnDistinctCrossings] = 0
numpy.add.at(
arrayCurveGroups[:, columnDistinctCrossings]
, numpy.searchsorted(
a=arrayCurveGroups[:, columnCurveLocations]
, v=arrayCurveLocations[:, columnCurveLocations])
, arrayCurveLocations[:, columnDistinctCrossings]
)
# I'm computing groupZulu from curveLocations that are physically in `arrayCurveGroups`, so I'm using `columnCurveLocations`.
numpy.bitwise_and(arrayCurveGroups[:, columnCurveLocations], numpy.uint64(groupZuluLocator64), out=arrayCurveGroups[:, columnGroupZulu])
numpy.right_shift(arrayCurveGroups[:, columnGroupZulu], 1, out=arrayCurveGroups[:, columnGroupZulu])
# NOTE Do not alphabetize these operations. This column has curveLocations data that groupZulu needs.
arrayCurveGroups[:, columnGroupAlpha] &= groupAlphaLocator64
return arrayCurveGroups

< /code>
 Warum glaube ich, dass diese Funktion langsam ist? Die Gesamtlaufzeit jeder Zeile wird in der linken Spalte angezeigt. Diese Werte sind repräsentativ für die vielen Tests, die ich durchgeführt habe.  Die vollständige Laufzeit in diesem Test betrug 204 Sekunden, die AggregateCurvelocations 
-Funktion 107 Sekunden und Numpy. src = "https://i.static.net/rem3utjk.png"/>

Quick Reply

Change Text Case: 
   
  • Similar Topics
    Replies
    Views
    Last post