Я заблудился в том, как написать функцию python, которая проходит по каждой строке и создает матрицу 3 на 3.
blockquote>Я понял, что вы уже имели дело со статистической частью проблемы (например, вычислением вероятностей из распределения Пуассона), я прав?
Если это так, вы можете использовать [114 ] itertools product для создания вашей таблицы.
Допустим, чтоprob_a
иprob_b
- это два массива, содержащие вероятности для команды A и команды B соответственно. Матрица построена следующим образом:from itertools import product import numpy as np prod_table = np.array([(i*j) for i, j in product(prob_b, prob_a)]) prod_table.shape = (4, 4)
Теперь у вас есть матрица 4x4 со всеми необходимыми значениями, которую вы можете преобразовать обратно в кадр данных pandas.
В этой таблице вероятности Team A - это индексы столбцов, вероятности Team B - индексы строк (что должно соответствовать вашему примеру). Таким образом, чтобы получить фрейм данных для панд, вы можете сделать:prob_df = pd.DataFrame(prod_table, index=prob_b, columns=prob_a)
И это таблица, которую вы ищете.
DDD - это способ мышления при разработке программного обеспечения, которое начинается с моделирования области. Как сказано на веб-странице :
Домен-управляемый дизайн не является технология или методология. Это образ мышления и набор приоритеты, направленные на ускорение программные проекты, которые должны иметь дело со сложными доменами.
Одна вещь, которая естественным образом следует из этого шаблона проектирования, это многоуровневая архитектура. Как сказано в Сводка по шаблонам DDD
Разбиение сложной программы на СЛОИ. Разработка дизайна в каждом СЛОЙ, который является связным и зависит только от слоев ниже. Следуйте стандартным архитектурным образцам обеспечить слабую связь с слоями выше. Сконцентрируйте весь код связанные с моделью предметной области в одном слой и изолировать его от пользователя интерфейс, приложение и код инфраструктуры. Домен объекты, свободные от ответственности показ себя, хранение сами, управляющие приложением задачи и т. д. могут быть сосредоточены на выражая модель предметной области. это позволяет модели развиваться, чтобы быть богатым достаточно и достаточно ясно, чтобы захватить необходимые знания бизнеса и положить это сработает.
Нужно ли иметь экранные объекты для этого? Это всего лишь один из способов реализации этого, но, возможно, даже не лучший способ обеспечить слабую связь. Что касается примера: может быть, слой представления - это всего лишь веб-браузер и файлы xlt для визуализации XML-файлов, излучаемых бизнес-уровнем? Если у кого-то есть более подходящие примеры, пожалуйста, добавьте их. Я хочу сказать, что DDD подчеркивает многоуровневую архитектуру, но не ограничивает это одним возможным решением.
В проекте MVC вы, как правило, имеете отображение из репозитория -> Доменные модели, а затем из Доменных моделей -> Просмотр моделей. Хотя модели просмотра часто содержат доменные объекты.
Если вы делаете паттерн MVC, вам нужно просматривать объекты; DDD это просто ваша модель. Это не значит, что вы должны всегда использовать MVC; DDD может быть построен, скажем, как симулятор, где все, на что вы смотрите, - это сообщения журнала. Но в MVC у вас действительно должны быть отдельные объекты вида.
Теперь спросите себя, почему это так? Ответ заключается в том, что представление может измениться, даже если бизнес-модель не изменится . Модель DDD должна выражать, с точки зрения бизнеса, то, что важно для бизнеса.
Ответ довольно прост:
Если вы можете использовать объекты своей области в представлении, возможно, они не совсем ориентированы на предметную область.
Я действительно не начинал понимать, почему и как можно отделить модель предметной области от проблем представления, пока я не начал следить за работой Грега Янга и Уди Дахана (через Мартина Фаулера).
Они учили принципу, известному как Разделение ответственности за команды и запросы (CQRS).
Моя интерпретация CQRS заключается в том, что есть два набора обязанностей, которые могут тянуть модель предметной области в разных направлениях , в результате получилась модель, которая не очень хорошо справляется с обеими задачами. Две обязанности - это команды (то есть поведение, которое может вызвать запись в базу данных) и запросы (то есть чтение из базы данных с целью получения данных для использования пользовательским интерфейсом). Примером может быть добавление геттеров и сеттеров к вашим объектам для поддержки привязки данных в пользовательском интерфейсе. Если в вашей модели есть геттеры и сеттеры, он, вероятно, плохо справится с моделированием изменений состояния, которые должны происходить в транзакциях, или с инкапсуляцией бизнес-логики. У него также не будет способа моделирования бизнес-контекста изменений состояния (см. Источники событий).
В терминах DDD вы можете сказать, что модель предметной области и модель представления обычно находятся в отдельных ограниченных контекстах.
Решение как предписано CQRS, заключается в создании одной модели для команд и другой для запросов. Если в вашей текущей модели есть методы для изменения состояния (т. Е. Поведения в модели) и геттеры, которые предоставляют состояние пользовательскому интерфейсу для привязки данных, вы бы реорганизовали эти две обязанности в отдельные модели для команд и запросов. Модель запроса не будет сопоставлена с сущностями вашего домена, а будет напрямую связана с базой данных. Если ваша база данных не захватывает производное состояние из вашей модели предметной области,
Объекты домена на самом деле являются внутренней логикой внутри вашего уровня бизнес-логики. Они не должны напрямую открываться вашим клиентам (уровень пользовательского интерфейса). Вместо этого инкапсулируйте использование вашей модели предметной области в сервисы приложения. Службы приложений могут использовать облегченные DTO и / или командные объекты для передачи данных и намерений между клиентом и моделью предметной области.