Как Вы используете LINQ с Sqlite

Чтобы добавить к уже опубликованным ответам, я хотел бы добавить тот, который учитывает ошибки из-за точности с плавающей запятой в том случае, если матрицы происходят, скажем, при обработке изображений, например, где числа подпадают под плавучую точку операции.

Вы можете пересчитать индексы большей матрицы, ища меньшую матрицу. Затем вы можете извлечь подматрицу большей матрицы, соответствующую размеру меньшей матрицы.

У вас есть совпадение, если совпадение содержимого как подматрицы «большой», так и «малой» матрицы.

В следующем примере показано, как вернуть первые индексы местоположения в найденной большой матрице. Было бы тривиально расширять эту функцию, чтобы вернуть массив найденных местоположений, если это намерение.

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
29
задан minty 25 November 2008 в 23:06
поделиться

8 ответов

LINQPad Джо Албахари теперь поддерживает Sqlite: http://www.linqpad.net/Beta.aspx . Один инструмент LINQ, чтобы управлять ими всеми.

11
ответ дан Ed Power 14 October 2019 в 08:55
поделиться

Ссылка, предоставленная CMS, больше не работает. Я использовал этот один , поскольку это теперь, кажется, испеклось в их SQL облегченный поставщик.NET ADO.

, К сожалению, они все еще не поддерживают режим разработчика VS для создания классов: (

Также знать, что компактный SQL Server не поддерживает режим проектирования для классов LINQ! Однако, если Вы хотите использовать платформу объекта, разработчик действительно работает на SQL облегченный и компактный SQL Server:)

4
ответ дан Alex 14 October 2019 в 08:55
поделиться

Да существует Поставщик SqlLite Linq , как упомянуто компактным SQL-сервером Выезда CMS

, и он работает хорошо с Linq

существует другой поток на ПОЭТОМУ, который необходимо проверить

2
ответ дан Community 14 October 2019 в 08:55
поделиться

Проверьте этого поставщика:

Поставщик SqlLite Linq

Также можно рассмотреть использование SQL, Компактный , который имеет очень хороший LINQ к поддержке SQL.

0
ответ дан CMS 14 October 2019 в 08:55
поделиться

Я хотел бы добавить, что можно использовать Linq для Sql с SqlLite с несколькими соглашениями:

  1. Вы не можете использовать Linq для разработчика Sql, что означает, что необходимо вручить списку классы.
  2. необходимо бояться делать определенную операцию, которая приведет к коду SQL, который не поддерживается SqlLite.

, Например, Вы не можете использовать FirstOrDefault () ни в одном из Ваших запросов Linq, потому что он приведет к чему-то как:

select top 1 * from table where ...

, Так как SqlLite не поддерживает "лучший 1" синтаксис, Вы будете gt ошибка SQL во время выполнения.

Кроме этого, я использовал Linq для Sql с SqlLite с большим успехом для основных операций CRUD.

1
ответ дан 2 revs 14 October 2019 в 08:55
поделиться

На этот раз НЕТ хороших инструментов для этого!

Поставщики LINQ для SQLite all находятся в альфа-стадии (например: dblinq2007 ). И это очень большой риск использовать его в коммерческих целях! Так что, возможно, в будущем ...

Если вы не хотите использовать ADO.NET, у вас есть хорошая новость: phxsoftware .

0
ответ дан Sasha 14 October 2019 в 08:55
поделиться

Вы можете использовать это: http://code.google.com/p/dblinq2007 . Хотя похоже, что проект все еще находится в стадии альфа, IMO на самом деле сейчас он очень стабилен. Конечно, если у вас огромный проект, лучше подумать об использовании чего-то еще, например MySQL или SQL Compact. Мне не нравится SQL Server, потому что он слишком раздут и предлагает не намного больше функций по сравнению с SQL Compact или MySQL

2
ответ дан 28 November 2019 в 01:59
поделиться
Другие вопросы по тегам:

Похожие вопросы: