Создать третий массив на основе информации о двух массивах только с пустыми функциями (без итераций / циклов) - PullRequest
0 голосов
/ 11 июля 2019

У меня есть сложная функция, которая принимает два аргумента x и y и возвращает целое значение i.Информация i сохраняется в массиве FF с формой (200 200).Значения Элемента i в FF находятся в диапазоне от 0 до 39999 и не назначаются дважды во всем массиве.Array FF ​​рассчитывается заранее и существует при создании Array SF.(см. ниже) Дополнительная информация: комплексная функция вычисляет позицию бита в матрице NxN qrcode, которая может быть предварительно рассчитана для каждой версии qrcode и ecc

Вторая функция,который создает одномерный массив SF булевых значений с функцией SF [i], поэтому он имеет форму (40000,).Массив создается с помощью

SF = numpy.fromfunction((lambda i: ((data[i >> 3] >> 7 - (i & 7)) & 1 != 0)), (40000,))

, где data [] - это массив с байтами. (Дополнительная информация: функция оценивает каждый бит каждого байта как true или false.)

Важно знать: FF [x] [y] = i описываетположение нужной информации в массиве SF.

Моя проблема

Существует ли встроенная функция NASTPY FAST (или последовательное применение функций NUMPY), которая может(БЕЗ медленной итерации Python, перечисления или циклов) объединить два массива FF и SF, чтобы целевой массив TARGET создавался (как SF [(FF [x] [y])]]) сразу?

import numpy as np

FF = np.arange(40000)
np.random.shuffle(FF)
#  FF = FF.reshape((200, 200))  # Only to understand 200x200 = 40000
FF = FF.reshape((40000,))

SF = np.random.choice(2, size=40000).astype(bool)  # Create Array with random boolean
TARGET = np.zeros((40000,), dtype=bool)  # Create Target array

for index in range(40000):  # This for should be replaced with numpy to create TARGET
    pos_in_SF_array = FF[index]  # get position in Second array out of First array at position 0..39999
    value_true_false_at_pos = SF[pos_in_SF_array]  # get True or False at the desired position
    TARGET[index] = value_true_false_at_pos  # Write it at the position index from TARGET

print("Example for take pos in first array and address the value of second array:")
print("Then write the True false in the Target array")
print(FF[12345])
print(SF[FF[12345]])
TARGET[12345] = SF[FF[12345]]  # Assign the Value

TARGET = TARGET.reshape(200, 200)  # Reshape it in the same manner as FF
print(TARGET)

1 Ответ

0 голосов
/ 11 июля 2019

хорошо, я нашел самое простое решение по этой теме Как получить значения из массива NumPy, используя несколько индексов

TARGET2 = (np.take(SF, FF)).reshape(200,200)
print(np.array_equal(TARGET, TARGET2))    # True
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...