Python, структура для поиска и извлечения сходства. Список. Словарь или датафрейм? - PullRequest
0 голосов
/ 10 мая 2019

У меня есть некоторые измерения, хранящиеся в настоящее время в массиве:

    myMatrix[:5,:5]
    Out[11]: 
    array([[192., 192.,   0.,   0.,   0.],
    [185., 171.,   0.,   0.,   0.],
    [ 17.,   1.,  16.,  17.,   1.],
    [185., 185.,   0.,   0.,   0.],
    [185., 185.,   0.,   0.,   0.]])

Я хотел бы написать функцию, которая работает по строкам и находит сходства.

Ввод функции долженпеременная, например, ожидаемый ввод может быть просто 192 или 185,185 .

На основе этого ввода алгоритм должен выполнить поиск (цикл forЯ полагаю) на записи, которые имеют первый столбец (для ввода 192 , это будет первый столбец, для ввода 185,185 , который будет первые два столбца) иверните мне обратно строки, где есть совпадение.

Например, для ввода 185,185 должны быть возвращены две последние строки.

Каков будет лучший тип данных, для которого я должен написать код?

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

Ответы [ 2 ]

0 голосов
/ 10 мая 2019

Это зависит от ваших требований и знаний. Для крошечного набора данных, как вы знаете, будет быстрее всего написать код, дающий решение. Если вы хотите поэкспериментировать с пандами или если набор данных большой, панда, безусловно, хороший способ, потому что он может напрямую использовать массив numpy.

Здесь вы можете использовать:

def find_start(mat, *val):
    # convert the argument list to a ndarray of right type
    s = np.array(val, dtype = mat.dtype)
    # compare the start of each line with that ndarray (assuming s is shorter than the line)
    return (df.iloc(1)[0:len(s)] == s).agg(all, axis=1)

Затем с данными вашего примера:

>>> print(find_start(myMatrix, 192))
0     True
1    False
2    False
3    False
4    False
dtype: bool
>>> print(find_start(myMatrix, 185, 185.))
0    False
1    False
2    False
3     True
4     True
dtype: bool
0 голосов
/ 10 мая 2019

В этом случае используйте панд и numpy.

import pandas as pd
import numpy as np

df = pd.DataFrame(np.array([[192., 192.,   0.,   0.,   0.],
    [185., 171.,   0.,   0.,   0.],
    [ 17.,   1.,  16.,  17.,   1.],
    [185., 185.,   0.,   0.,   0.],
    [185., 185.,   0.,   0.,   0.]]), 
columns=['a', 'b', 'c', 'd', 'e'])
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...