У меня есть 1D массив numpy, содержащий комплексные числа (например, numpy.complex64). Мне нужно создать представления для этого массива, но я не знаю, как создать представление, учитывая список или диапазон индексов , чтобы включить в представление .
>>> myArray = np.ndarray(shape=(1000,), dtype=np.complex64)
Я знаю, как создать представление для последовательных элементов, например, первых 100 элементов:
>>> myView = myArray[:100]
Как я экспериментировал, невозможно создать представление для отдельного элемента, такого как myArray [2], потому что, если бы я изменил это значение, он не изменил бы базовый массив. Это нормально, но я надеюсь, что есть способ построить представление из нескольких произвольных индексов, поэтому такая функция была бы великолепна:
>>> myView = createView(myArray, indices=(0, 1, 6, 7, 13))
, который возвращает представление, которое указывает на те индексы, которые указаны в списке (или любой итерируемой форме), и если я изменю myView, он изменит myArray, как и должно быть.
Возможно ли это, или есть разумный обходной путь?
Спасибо
редактировать
Чтобы объяснить, зачем мне это нужно: я хочу скопировать массив в память устройства OpenCL (и обратно). Мне нужен другой порядок элементов на устройстве, чем в исходном массиве, и эти более короткие массивы будут рассматриваться как векторы, и умножение матриц будет происходить в ядре OpenCL. Если элементы не копируются в память устройства в требуемом порядке, объединение памяти будет невозможно, и произойдет значительное снижение производительности, не говоря уже о дополнительной логике, которая потребуется на стороне OpenCL.
В моем случае это можно сделать с равномерно распределенными видами, но мне интересно, есть ли более общий способ. Небольшое снижение производительности на стороне процессора нормально, если можно сделать более общую реализацию.