Все уникальные продукты умножения - PullRequest
1 голос
/ 20 марта 2019

Я хочу получить все уникальные продукты для данного вектора.

Например, учитывая a:

a = [4,10,12,3,6]

Я хочу получить матрицу, которая содержит результаты:

4*10
4*12
4*3
4*6
10*12
10*3
10*6
12*3
12*6
3*6

Есть ли короткое и /или быстрый способ сделать это в MATLAB?

РЕДАКТИРОВАТЬ : a может содержать дубликаты номеров, давая дубликаты продуктов - и они должны быть сохранены.

Ответы [ 4 ]

3 голосов
/ 21 марта 2019

Если у вас есть набор инструментов статистики, вы можете использовать pdist, который рассматривает только один из двух возможных ордеров для каждой пары:

result = pdist(a(:), @times);
3 голосов
/ 20 марта 2019

Дано:

a =

    4   10   12    3    6

Создайте матрицу из всех парных продуктов:

>> all_products = a .* a.'
all_products =

    16    40    48    12    24
    40   100   120    30    60
    48   120   144    36    72
    12    30    36     9    18
    24    60    72    18    36

Теперь создайте маску, чтобы оставить только те значения ниже основногодиагональ:

>> mask = tril(true(size(all_products)), -1)
mask =

  0  0  0  0  0
  1  0  0  0  0
  1  1  0  0  0
  1  1  1  0  0
  1  1  1  1  0

и нанесение маски на матрицу товара:

>> unique_products = all_products(mask)
unique_products =

    40
    48
    12
    24
   120
    30
    60
    36
    72
    18
2 голосов
/ 21 марта 2019

Одна опция включает nchoosek, которая возвращает все комбинации элементов k из вектора, каждая строка представляет собой одну комбинацию. prod вычисляет произведение строк или столбцов:

a = [4,10,12,3,6];
b = nchoosek(a,2);
b = prod(b,2); % 2 indicates rows
0 голосов
/ 20 марта 2019

Попробуйте начать с этого.Имейте уникальную функцию, отфильтровывающую результат умножения на себя.

b = unique(a*a')
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...