Как я могу более эффективно консолидировать Numpy Ndarray с целочисленными ценностями?Python

Программы на Python
Ответить Пред. темаСлед. тема
Anonymous
 Как я могу более эффективно консолидировать Numpy Ndarray с целочисленными ценностями?

Сообщение Anonymous »

Я прошу прощения за то, что включил слишком много информации.

Код: Выделить всё

arrayCurveLocations
- это несортированный NDArray с парами целых чисел: Curvelocations и inclivecrossings .
Если цифра появляется более раз в ndarray, я хочу консолидировать Curvalocations , добавив вместе соответствующие цифры >> 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>
Если бы у меня был массив индексов, которые подписали исходный массив, я думаю, что следующее будет работать.def aggregateCurveLocations(arrayCurveLocations: DataArray2columns) -> DataArray3columns:
u, indices4arrayCurveLocations = np.unique(arrayCurveLocations, return_fantasy_indices = True)
...
consolidatedDistinctCrossings = np.add.reduceat(arrayCurveLocations, indices4arrayCurveLocations)
< /code>
Я думаю, что мне не хватает фундаментальной концепции < /h1>
Я пытаюсь дублироваться посредством консолидации, верно? Но порядок сортировки не имеет значения. «Если есть дубликаты, то добавьте их вместе» кажется простой задачей, поэтому я думаю, что я упускаю из виду что-то или что-то не понимает.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>
Почему я считаю, что эта функция медленная? Общее время выполнения каждой строки отображается в левом столбце. Эти значения являются репрезентативными для многих тестов, которые я запускал. Полное время выполнения в этом тесте составило 204 секунды, функция AggregateCurvolocations [/code] составила 107 секунд, а Numpy.unique и Numpy.SearchSorted - 101 секунды. src = "https://i.sstatic.net/rem3utjk.png"/>

Подробнее здесь: https://stackoverflow.com/questions/797 ... fficiently
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение
  • Как я могу более эффективно консолидировать Numpy Ndarray с целочисленными ценностями?
    Anonymous » » в форуме Python
    0 Ответы
    2 Просмотры
    Последнее сообщение Anonymous
  • Ошибка типа: невозможно преобразовать numpy.ndarray в numpy.ndarray
    Anonymous » » в форуме Python
    0 Ответы
    742 Просмотры
    Последнее сообщение Anonymous
  • Ошибка типа: невозможно преобразовать numpy.ndarray в numpy.ndarray
    Anonymous » » в форуме Python
    0 Ответы
    127 Просмотры
    Последнее сообщение Anonymous
  • Ошибка типа: невозможно преобразовать numpy.ndarray в numpy.ndarray
    Anonymous » » в форуме Python
    0 Ответы
    38 Просмотры
    Последнее сообщение Anonymous
  • Ошибка типа: невозможно преобразовать numpy.ndarray в numpy.ndarray
    Anonymous » » в форуме Python
    0 Ответы
    31 Просмотры
    Последнее сообщение Anonymous

Вернуться в «Python»