1

160 万行のデータを含む CSV があり、約 150 MB で、製品データが含まれています。大きなCSVに製品のリストが含まれている2000行を含む別のCSVがあります。それらは一意の ID によって相互に関連付けられます。アイデアは、CSV に 2000 行の製品データを追加することです。

databank.csv には、ヘッダー、、、がIDあります。ヘッダーがあります。Product NameDescriptionPricesm_list.csvID

sm_list.csv結果は、対応するデータがdatabank.csv... 2000行の長さの製品を含むcsvを出力することです。

私の元のソリューションは、すべてをsm_list読み取り、データバンクを 1 行ずつ読み取ります。データバンクから読み込んだ行で検索sm_listします。IDこれにより、2000x160 万 = 32 億回の比較が行われます。

このタスクを最も効率的な方法で完了するための基本的なアルゴリズムの概要を教えてください。

4

2 に答える 2

2

MATLABでCSVファイルを読み取る/書き込む方法を知っていると仮定すると(SOに関するいくつかの質問でその方法がわかります)、例を次に示します。

%# this would be read from "databank.csv"
prodID = (1:10)';     %'
prodName = cellstr( num2str(prodID, 'Product %02d') );
prodDesc = cellstr( num2str(prodID, 'Description %02d') );
prodPrice = rand(10,1)*100;
databank = [num2cell(prodID) prodName prodDesc num2cell(prodPrice)];

%# same for "sm_list.csv"
sm_list = [2;5;7;10];

%# find matching rows
idx = ismember(prodID,sm_list);
result = databank(idx,:)

%# ... export 'result' to CSV file ...

上記の例の結果:

result = 
    [ 2]    'Product 02'    'Description 02'    [19.251]
    [ 5]    'Product 05'    'Description 05'    [14.651]
    [ 7]    'Product 07'    'Description 07'    [4.2652]
    [10]    'Product 10'    'Description 10'    [ 53.86]
于 2011-08-24T15:59:54.937 に答える
1

matlabを使用する必要がありますか? そのすべてのデータをデータベースに入力するだけなら、簡単です。シンプルselect tableA.ID, tableB.productname... where tableA.id = tableB.idにやります。

于 2011-08-24T14:44:38.470 に答える