Получение интервалов между двумя двумерными массивами numpy, содержащими заданный диапазонPython

Программы на Python
Ответить Пред. темаСлед. тема
Гость
 Получение интервалов между двумя двумерными массивами numpy, содержащими заданный диапазон

Сообщение Гость »

Я изо всех сил пытался написать функцию для разделения интервалов в двух массивах numpy (a1,a2), которые содержат интервалы в полном диапазоне 0, 6000.
интервалы из a1 и a2 не могут каким-либо образом перекрываться , если интервал находится в некоторых значениях в a1, он не может быть в a2, и наоборот.
Мне нужна функция shuffle, которая будет принимать заданный интервал, часть интервала, которая находится в a1, перемещается в a2 и часть интервала
, которая находится в a2, перемещается в a1.
наконец, 2D-массивы сортируются и уплотняются, гарантируя, что массивы не увеличиваются в размерах без необходимости, когда интервалы близки. например, если массив имеет [[0,1],[1,3]] его нужно будет сжать до [[0,3]]
Я пробовал разные вещи, но не могу получить векторизованный вариант этого. Мне удалось написать тестовый пример unittest, показывающий, как должны выглядеть выходные данные.


import unittest
class TestCases(unittest.TestCase):

def test_invertRange(self):
def shuffle(interval, a1, a2):
#implement here
pass
return a1, a2
a1 = np.array([[1,300],[500,600],[5000,6000]])
a2 = np.array([[0,1],[300,500],[600,5000]])
a1,a2 = shuffle(np.array([[0.5,1.5]]),a1,a2)
self.assertEqual(a1,np.array([[0.5,1],[1.5,300],[500,600],[5000,6000]]))
self.assertEqual(a2,np.array([[0,0.5],[1,1.5],[300,500],[600,5000]]))
suma1 = np.sum(a1[:,1] - a1[:,0])
suma2 =np.sum(a2[:,1] - a2[:,0])
total = suma1 + suma2
# the sum of intervals should always equal the sum of the range 0,6000
self.assertEqual(total, np.sum(np.linspace(0,6001)))
a1,a2 = shuffle(np.array([[0.5,1.5]]),a1,a2)
self.assertEqual(a1,np.array([[1,300],[500,600],[5000,6000]]))
self.assertEqual(a2,np.array([[0,1],[300,500],[600,5000]]))
suma1 = np.sum(a1[:,1] - a1[:,0])
suma2 =np.sum(a2[:,1] - a2[:,0])
total = suma1 + suma2
# the sum of intervals should always equal the sum of the range 0,6000
self.assertEqual(total, np.sum(np.linspace(0,6001)))



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

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

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

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

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

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

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