Чтобы добавить к уже опубликованным ответам, я хотел бы добавить тот, который учитывает ошибки из-за точности с плавающей запятой в том случае, если матрицы происходят, скажем, при обработке изображений, например, где числа подпадают под плавучую точку операции.
Вы можете пересчитать индексы большей матрицы, ища меньшую матрицу. Затем вы можете извлечь подматрицу большей матрицы, соответствующую размеру меньшей матрицы.
У вас есть совпадение, если совпадение содержимого как подматрицы «большой», так и «малой» матрицы.
В следующем примере показано, как вернуть первые индексы местоположения в найденной большой матрице. Было бы тривиально расширять эту функцию, чтобы вернуть массив найденных местоположений, если это намерение.
import numpy as np
def find_submatrix(a, b):
""" Searches the first instance at which 'b' is a submatrix of 'a', iterates
rows first. Returns the indexes of a at which 'b' was found, or None if
'b' is not contained within 'a'"""
a_rows=a.shape[0]
a_cols=a.shape[1]
b_rows=b.shape[0]
b_cols=b.shape[1]
row_diff = a_rows - b_rows
col_diff = a_cols - b_cols
for idx_row in np.arange(row_diff):
for idx_col in np.arange(col_diff):
row_indexes = [idx + idx_row for idx in np.arange(b_rows)]
col_indexes = [idx + idx_col for idx in np.arange(b_cols)]
submatrix_indexes = np.ix_(row_indexes, col_indexes)
a_submatrix = a[submatrix_indexes]
are_equal = np.allclose(a_submatrix, b) # allclose is used for floating point numbers, if they
# are close while comparing, they are considered equal.
# Useful if your matrices come from operations that produce
# floating point numbers.
# You might want to fine tune the parameters to allclose()
if (are_equal):
return[idx_col, idx_row]
return None
Используя вышеприведенную функцию, вы можете запустить следующий пример:
large_mtx = np.array([[1, 2, 3, 7, 4, 2, 6],
[4, 5, 6, 2, 1, 3, 11],
[10, 4, 2, 1, 3, 7, 6],
[4, 2, 1, 3, 7, 6, -3],
[5, 6, 2, 1, 3, 11, -1],
[0, 0, -1, 5, 4, -1, 2],
[10, 4, 2, 1, 3, 7, 6],
[10, 4, 2, 1, 3, 7, 6]
])
# Example 1: An intersection at column 2 and row 1 of large_mtx
small_mtx_1 = np.array([[4, 2], [2,1]])
intersect = find_submatrix(large_mtx, small_mtx_1)
print "Example 1, intersection (col,row): " + str(intersect)
# Example 2: No intersection
small_mtx_2 = np.array([[-14, 2], [2,1]])
intersect = find_submatrix(large_mtx, small_mtx_2)
print "Example 2, intersection (col,row): " + str(intersect)
Что бы напечатать:
Example 1, intersection: [1, 2] Example 2, intersection: None
LINQPad Джо Албахари теперь поддерживает Sqlite: http://www.linqpad.net/Beta.aspx . Один инструмент LINQ, чтобы управлять ими всеми.
Ссылка, предоставленная CMS, больше не работает. Я использовал этот один , поскольку это теперь, кажется, испеклось в их SQL облегченный поставщик.NET ADO.
, К сожалению, они все еще не поддерживают режим разработчика VS для создания классов: (
Также знать, что компактный SQL Server не поддерживает режим проектирования для классов LINQ! Однако, если Вы хотите использовать платформу объекта, разработчик действительно работает на SQL облегченный и компактный SQL Server:)
Да существует Поставщик SqlLite Linq , как упомянуто компактным SQL-сервером Выезда CMS
, и он работает хорошо с Linq
существует другой поток на ПОЭТОМУ, который необходимо проверить
Проверьте этого поставщика:
Также можно рассмотреть использование SQL, Компактный , который имеет очень хороший LINQ к поддержке SQL.
Я хотел бы добавить, что можно использовать Linq для Sql с SqlLite с несколькими соглашениями:
, Например, Вы не можете использовать FirstOrDefault () ни в одном из Ваших запросов Linq, потому что он приведет к чему-то как:
select top 1 * from table where ...
, Так как SqlLite не поддерживает "лучший 1" синтаксис, Вы будете gt ошибка SQL во время выполнения.
Кроме этого, я использовал Linq для Sql с SqlLite с большим успехом для основных операций CRUD.
На этот раз НЕТ хороших инструментов для этого!
Поставщики LINQ для SQLite all находятся в альфа-стадии (например: dblinq2007 ). И это очень большой риск использовать его в коммерческих целях! Так что, возможно, в будущем ...
Если вы не хотите использовать ADO.NET, у вас есть хорошая новость: phxsoftware .
Вы можете использовать это: http://code.google.com/p/dblinq2007 . Хотя похоже, что проект все еще находится в стадии альфа, IMO на самом деле сейчас он очень стабилен. Конечно, если у вас огромный проект, лучше подумать об использовании чего-то еще, например MySQL или SQL Compact. Мне не нравится SQL Server, потому что он слишком раздут и предлагает не намного больше функций по сравнению с SQL Compact или MySQL