Матричное представление. image 2. Я написал так для горизонтальной группы -1. но я не уверен, правильно это или нет?
Мне нужно обобщенное математическое уравнение для группы горизонтальных -1 и группы вертикальных -1 в матрице. если есть группы по -1 в строке и если есть группа из 1 в столбце. На прилагаемом рисунке выделены красным цветом элементы, входящие в обязательные группы.
@ nits.kk. я прикрепил это сейчас. На самом деле мне нужна группа горизонтальных -1 и вертикальных -1 записей.
Ваш вопрос непонятен. Под «уравнением» вы подразумеваете отношение, функцию, которая генерирует их из номеров строк и столбцов, или что-то еще? В вашем тексте упоминается 1's
, но на вашем графике есть -1
(за исключением одного 1
в строке 6 столбца 13). Вы хотите «уравнение» для каждой группы единиц, для обеих групп вместе или для всей матрицы? И так далее. Просьба уточнить. Помог бы простой пример с желаемым ответом. Наконец, какие попытки вы предприняли для решения этой проблемы и в чем именно вы застряли?
@ Rory Daulton: да, мне нужно математическое уравнение для генерации, 1) где бы ни была группа горизонтальных -1 в матрице, 2) другое уравнение для вертикальных -1 в матрице. например, есть горизонтальная группа из -1 при a511 = -1 и a512 = -1. И есть еще одна вертикальная группа -1, то есть v714 = -1, v814 = -1, v914 = -1, v1014 = -1.
Я голосую за то, чтобы закрыть этот вопрос как не по теме, потому что он не о программировании. OP явно запрашивает уравнение, а не код.
После разговора с 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 и ограничена частью только одной строки или частью только одного столбца». Это именно то, о чем я хочу спросить. Я работаю над матрицами и хочу найти функцию / уравнение для моей проблемы. Не могли бы вы мне помочь. Спасибо
Это может быть хороший вопрос для обмен стеком математики. Фактически, я нашел красивую формулу там. Похоже, вы могли бы взять две подматрицы идентичности 18x18, поместить их по обе стороны вашей матрицы V, а затем удалить строки, которые вам не нужны, из матрицы идентичности слева, а затем удалить столбцы, которые вам не нужны. из единичной матрицы справа.
Мне действительно тяжело. На самом деле, мне нужна математическая функция, которая, как я могу получить желаемую подматрицу, содержит только -1 по горизонтали, а другая подматрица содержит -1 по вертикали.
Вам нужен способ найти подматрицы, или вам нужен способ получать подматрицы?
Вы видели, как они получили желаемую подматрицу в задаче на этой странице https://math.stackexchange.com/questions/1322942/formula-to- получить-подматрицу? Чем этот ответ отличался от того, который вам нужен?
Мне нужна формула для получения группы по горизонтали -1 и группы по вертикали -1 в моей матрице. как вы можете, есть одна горизонтальная группа в первой строке (v2, v3, v4). и есть вертикальная группа -1 в строке v7, v8, v9,10.
Я работаю над поиском алгоритма, определяющего, как я могу искать матрицу для группы горизонтальных -1 и группы вертикальных -1. Для этого мне нужна математическая формула для получения такого рода групп в матрице.
Я не знаю, как построить формула, но я мог бы построить алгоритм (или компьютерная программа), который мог бы вернуть список ВСЕХ подматриц, содержащих исключительно -1. Похоже, что некоторые ребята делали что-то подобное в numpy на этой странице: https://stackoverflow.com/a/26898043/10227068
Я был бы очень признателен, если бы вы могли построить, который мог бы вернуть список ВСЕХ подматриц, содержащих исключительно -1. Спасибо
Я не смогу сейчас, потому что у меня мобильный телефон и я готов лечь спать. Я могу дать тебе завтра. А пока я предлагаю вам узнать больше о python и библиотеке numpy. Вот источник, из которого я узнал numpy: http://www.acme.byu.edu/wp-content/uploads/2016/08/NumpyIntr o.pdf
Я отредактировал свой ответ. Я привел пример того, как искать строки совпадающих чисел в матрице, используя библиотеку numpy в python.
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}}
где прикрепленное изображение?