У меня есть несколько пустых массивов, и я хочу создать новые массивы, выполняющие что-то похожее на XOR ... но не совсем.
Мой ввод - два массива, array1 и array2.Мой вывод - модифицированная (или новый массив, мне все равно) версия array1.
Модификация выполняется поэлементно, выполняя следующие действия:
1.) Если какой-либо из массивов имеет0 для данного индекса, то индекс остается без изменений.2.) Если array1 и array2 отличны от нуля, то измененному массиву присваивается значение индекса array1, вычитаемое из индекса array2, до минимума, равного нулю.
Примеры:
array1: [0, 3, 8, 0]
array2: [1, 1, 1, 1]
output: [0, 2, 7, 0]
array1: [1, 1, 1, 1]
array2: [0, 3, 8, 0]
output: [1, 0, 0, 1]
array1: [10, 10, 10, 10]
array2: [8, 12, 8, 12]
output: [2, 0, 2, 0]
Я хотел бы иметь возможность сделать это, скажем, с одним утверждением numpy.copyto, но я не знаю как.Спасибо.
edit:
это просто поразило меня.Могу ли я сделать:
new_array = np.zeros(size_of_array1)
numpy.copyto(new_array, array1-array2, where=array1>array2)
Редактировать 2: Поскольку я получил несколько ответов очень быстро, я собираюсь сопоставить различные ответы друг с другом, чтобы увидеть, как они делают.Вернитесь с результатами через несколько минут.
Хорошо, результаты представлены в виде:
массив случайных чисел от 0 до 5, размер = 10000, 10 циклов
1.)используя мой метод np.copyto
2.) используя клип
3.) используя максимум
0.000768184661865
0.000391960144043
0.000403165817261
Kasramvd также предоставил несколько полезных таймингов ниже