Обобщенное математическое уравнение для группы горизонтальных -1 и группы вертикальных -1 в матрице

Матричное представление. image 2. Я написал так для горизонтальной группы -1. но я не уверен, правильно это или нет? Обобщенное математическое уравнение для группы горизонтальных -1 и группы вертикальных -1 в матрице

Мне нужно обобщенное математическое уравнение для группы горизонтальных -1 и группы вертикальных -1 в матрице. если есть группы по -1 в строке и если есть группа из 1 в столбце. На прилагаемом рисунке выделены красным цветом элементы, входящие в обязательные группы.

где прикрепленное изображение?

nits.kk 14.08.2018 12:18

@ nits.kk. я прикрепил это сейчас. На самом деле мне нужна группа горизонтальных -1 и вертикальных -1 записей.

Ali 14.08.2018 12:23

Ваш вопрос непонятен. Под «уравнением» вы подразумеваете отношение, функцию, которая генерирует их из номеров строк и столбцов, или что-то еще? В вашем тексте упоминается 1's, но на вашем графике есть -1 (за исключением одного 1 в строке 6 столбца 13). Вы хотите «уравнение» для каждой группы единиц, для обеих групп вместе или для всей матрицы? И так далее. Просьба уточнить. Помог бы простой пример с желаемым ответом. Наконец, какие попытки вы предприняли для решения этой проблемы и в чем именно вы застряли?

Rory Daulton 14.08.2018 12:42

@ Rory Daulton: да, мне нужно математическое уравнение для генерации, 1) где бы ни была группа горизонтальных -1 в матрице, 2) другое уравнение для вертикальных -1 в матрице. например, есть горизонтальная группа из -1 при a511 = -1 и a512 = -1. И есть еще одна вертикальная группа -1, то есть v714 = -1, v814 = -1, v914 = -1, v1014 = -1.

Ali 14.08.2018 12:58

Я голосую за то, чтобы закрыть этот вопрос как не по теме, потому что он не о программировании. OP явно запрашивает уравнение, а не код.

High Performance Mark 15.08.2018 09:59
Стоит ли изучать PHP в 2023-2024 годах?
Стоит ли изучать PHP в 2023-2024 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
1
5
101
2

Ответы 2

Редактировать:

После разговора с OP в комментариях, похоже, ему может понадобиться способ, чтобы компьютер прошел и поиск смежных блоков -1 в строках или столбцах матрицы. Я привожу здесь пример, где вы можете искать по строкам, используя numpy в python:

import numpy as np;

V = np.array([
    [0,-1,-1,-1,0,0,0,0,0,0,0,0,0,0,0,0,0,0],
    [0,0,0,0,-1,0,0,0,0,-1,0,0,0,0,0,0,0,0],
    [0,0,0,0,0,-1,-1,0,0,0,0,0,0,0,0,0,0,0],
    [0,0,0,0,0,0,0,-1,-1,1,0,0,0,0,0,0,0,0],
    [0,0,0,0,0,0,0,0,0,0,-1,-1,0,0,0,-1,0,0],
    [0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0],
    [0,0,0,0,0,0,0,0,0,0,0,0,-1,-1,0,0,0,0],
    [0,0,0,0,0,0,0,0,0,0,0,0,0,-1,0,0,0,0],
    [0,0,0,0,0,0,0,0,0,0,0,0,0,-1,0,0,0,0],
    [0,0,0,0,0,0,0,0,0,0,0,0,0,-1,0,0,0,0],
    [0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0],
    [0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0],
    [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-1,0],
    [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-1,0],
    [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-1],
    [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-1],
    [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-1],
    [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0]])

def group_finder(A, num):
    print("Searching for groups of %d's in the rows of this matrix:"%num)
    print(A)
    print

    m = M.shape[0]
    n = M.shape[1]

    #find groups in rows
    for i in range(m):

        last_matched = False;
        index_of_group_start = None;

        #go through the entries in each row
        for j in range(n) :

            this_matched = (M[i][j] == num)

            if (this_matched):

                if (last_matched):
                    continue #keep processing the matching numbers

                else:
                    index_of_group_start = j

            else:
                if (last_matched and index_of_group_start+1 != j):

                    print("There is a group of %d's in row %d."
                            %(num, i+1))#add one because numpy is zero-indexed.

                    print("It starts at column %d and ends at column %d"
                                %(index_of_group_start+1, j))
                    print

            #update values for next iteration
            last_matched = this_matched


group_finder(V, -1)

Когда я запускаю этот код на своей машине, я получаю следующие выходные данные:

Searching for groups of -1's in the rows of this matrix:
[[ 0 -1 -1 -1  0  0  0  0  0  0  0  0  0  0  0  0  0  0]
 [ 0  0  0  0 -1  0  0  0  0 -1  0  0  0  0  0  0  0  0]
 [ 0  0  0  0  0 -1 -1  0  0  0  0  0  0  0  0  0  0  0]
 [ 0  0  0  0  0  0  0 -1 -1  1  0  0  0  0  0  0  0  0]
 [ 0  0  0  0  0  0  0  0  0  0 -1 -1  0  0  0 -1  0  0]
 [ 0  0  0  0  0  0  0  0  0  0  0  0  1  0  0  0  0  0]
 [ 0  0  0  0  0  0  0  0  0  0  0  0 -1 -1  0  0  0  0]
 [ 0  0  0  0  0  0  0  0  0  0  0  0  0 -1  0  0  0  0]
 [ 0  0  0  0  0  0  0  0  0  0  0  0  0 -1  0  0  0  0]
 [ 0  0  0  0  0  0  0  0  0  0  0  0  0 -1  0  0  0  0]
 [ 0  0  0  0  0  0  0  0  0  0  0  0  0  0  1  0  0  0]
 [ 0  0  0  0  0  0  0  0  0  0  0  0  0  0  1  0  0  0]
 [ 0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0 -1  0]
 [ 0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0 -1  0]
 [ 0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0 -1]
 [ 0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0 -1]
 [ 0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0 -1]
 [ 0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0]]

There is a group of -1's in row 1.
It starts at column 2 and ends at column 4

There is a group of -1's in row 3.
It starts at column 6 and ends at column 7

There is a group of -1's in row 4.
It starts at column 8 and ends at column 9

There is a group of -1's in row 5.
It starts at column 11 and ends at column 12

There is a group of -1's in row 7.
It starts at column 13 and ends at column 14

Старый ответ:

Я думаю, вам сложно описать то, о чем вы просите. Понятно. Думаю, я могу помочь вам описать вашу проблему.

Похоже, вам нужно найти последовательные ячейки с -1 в программе для работы с электронными таблицами, например Microsoft Excel или LibreOffice. Вам нужно что-то, что может найти непрерывной группы отрицательных элементов в матрице, а затем работать на них. Вы ищете что-то вроде функции COUNTIF, но вместо ячеек подсчет с определенным свойством вы пытаетесь использовать ячейки выделять или Выбрать с определенным свойством. В частности, вы хотите выделить ячейки, содержащие -1, и соседнюю ячейку, не расположенную по диагонали, которая также содержит -1. Ваш вопрос в том, как сделать это в программе для работы с электронными таблицами.

Если это так, вы использовали неправильные теги для своего вопроса. То, что кто-то знает математику, не означает, что он знает программное обеспечение для работы с электронными таблицами. Я бы порекомендовал изменить теги в вашем вопросе. Некоторые хорошие теги могут быть calc-libreoffice, excel или spreadsheet. Фактически, есть ответ на аналогичный вопрос с тегом excel, хотя он не касается строк.

Есть шанс, что вместо этого вы пытаетесь понять, как математик мог бы описывать непрерывной группы отрицательных единиц в матрице. В этом случае, я думаю, ваш вопрос можно было бы лучше сформулировать как «Какой математический выражение я должен использовать для описания подматрицы, которая полностью состоит из -1 и ограничена частью только одной строки или частью только одного столбца».

Один из ответов на этот вопрос - использовать форму записи индекса матрицы. Я бы обозначил вашу первую группу как V5, 11 -- 12, а вашу вторую группу как V7 -- 10, 15. Тогда я бы просто сказал, что все записи в V5, 11 -- 12 - -1.

«Какое математическое выражение я должен использовать для описания подматрицы, которая полностью состоит из -1 и ограничена частью только одной строки или частью только одного столбца». Это именно то, о чем я хочу спросить. Я работаю над матрицами и хочу найти функцию / уравнение для моей проблемы. Не могли бы вы мне помочь. Спасибо

Ali 15.08.2018 04:29

Это может быть хороший вопрос для обмен стеком математики. Фактически, я нашел красивую формулу там. Похоже, вы могли бы взять две подматрицы идентичности 18x18, поместить их по обе стороны вашей матрицы V, а затем удалить строки, которые вам не нужны, из матрицы идентичности слева, а затем удалить столбцы, которые вам не нужны. из единичной матрицы справа.

Logan Schelly 15.08.2018 04:48

Мне действительно тяжело. На самом деле, мне нужна математическая функция, которая, как я могу получить желаемую подматрицу, содержит только -1 по горизонтали, а другая подматрица содержит -1 по вертикали.

Ali 15.08.2018 05:24

Вам нужен способ найти подматрицы, или вам нужен способ получать подматрицы?

Logan Schelly 15.08.2018 05:47

Вы видели, как они получили желаемую подматрицу в задаче на этой странице https://math.stackexchange.com/questions/1322942/formula-to-‌ получить-подматрицу? Чем этот ответ отличался от того, который вам нужен?

Logan Schelly 15.08.2018 05:56

Мне нужна формула для получения группы по горизонтали -1 и группы по вертикали -1 в моей матрице. как вы можете, есть одна горизонтальная группа в первой строке (v2, v3, v4). и есть вертикальная группа -1 в строке v7, v8, v9,10.

Ali 15.08.2018 06:04

Я работаю над поиском алгоритма, определяющего, как я могу искать матрицу для группы горизонтальных -1 и группы вертикальных -1. Для этого мне нужна математическая формула для получения такого рода групп в матрице.

Ali 15.08.2018 06:09

Я не знаю, как построить формула, но я мог бы построить алгоритм (или компьютерная программа), который мог бы вернуть список ВСЕХ подматриц, содержащих исключительно -1. Похоже, что некоторые ребята делали что-то подобное в numpy на этой странице: https://stackoverflow.com/a/26898043/10227068

Logan Schelly 15.08.2018 06:38

Я был бы очень признателен, если бы вы могли построить, который мог бы вернуть список ВСЕХ подматриц, содержащих исключительно -1. Спасибо

Ali 15.08.2018 06:44

Я не смогу сейчас, потому что у меня мобильный телефон и я готов лечь спать. Я могу дать тебе завтра. А пока я предлагаю вам узнать больше о python и библиотеке numpy. Вот источник, из которого я узнал numpy: http://www.acme.byu.edu/wp-content/uploads/2016/08/NumpyIntr‌ o.pdf

Logan Schelly 15.08.2018 06:59

Я отредактировал свой ответ. Я привел пример того, как искать строки совпадающих чисел в матрице, используя библиотеку numpy в python.

Logan Schelly 15.08.2018 18:46
array = {
   {0,-1,-1,-1, 0, 0, 0, 0, 0,-1,-1, 0, 0, 0, 0, 0, 0, 0},
   {0, 0, 0, 0,-1, 0, 0, 0, 0,-1, 0, 0, 0, 0, 0, 0, 0, 0},
   {0, 0, 0, 0, 0,-1,-1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
   {0, 0, 0, 0, 0, 0, 0,-1,-1, 1, 0, 0, 0, 0, 0, 0, 0, 0},
   {0, 0, 0, 0, 0, 0, 0, 0, 0, 0,-1,-1, 0, 0, 0,-1, 0, 0},
   {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0},
   {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,-1,-1, 0, 0, 0, 0},
   {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,-1, 0, 0, 0, 0},
   {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,-1, 0, 0, 0, 0},
   {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,-1, 0, 0, 0, 0},
   {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0},
   {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0},
   {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,-1, 0},
   {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,-1, 0},
   {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,-1},
   {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,-1},
   {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,-1},
   {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}};

Несколько дополнительных -1 были добавлены в первую строку, чтобы продемонстрировать способность кода находить несколько диапазонов -1.

Определения функций

fromTo[y_] := #[[{1, -1}]] & /@ SplitBy[MapIndexed[
     If[# == -1, Last[#2]] &, y], Head] /. {a_, a_} -> Nothing

wherearethey[a_, dir_] := Grid[Prepend[DeleteCases[MapIndexed[
     {Last[#2], fromTo[#1]} &, If[dir == "Row", a, Transpose[a]]],
    {__, {}}], {dir, "{{From, To}}"}], Alignment -> Left]

Горизонтальное сканирование

wherearethey[array, "Row"]
Row  {{From, To}}
1    {{2,4},{10,11}}
3    {{6,7}}
4    {{8,9}}
5    {{11,12}}
7    {{13,14}}

Итак, в первой строке находятся -1 с позиции 2 по 4 и с 10 по 11.

Вертикальное сканирование

wherearethey[array, "Column"]
Column  {{From, To}}
10      {{1,2}}
14      {{7,10}}
17      {{13,14}}
18      {{15,17}}

Другие вопросы по теме