在Matlab中过滤掉组合

时间:2016-09-09 18:25:44

标签: arrays matlab filter combinations

目前我可以从alpha,beta,gamma和delta类别生成所有组合(1 1 1 1,1 1 1 2等)。

当前代码:

alpha = [1, 2, 3];
beta  = [1, 2, 3, 4, 5];
gamma = [1, 2, 3, 4, 5];
delta = [1, 2, 3];
[a, b, c, d] = ndgrid (alpha, beta, gamma, delta);
combination = [a(:), b(:), c(:), d(:)];

我想过滤掉其中一些组合,即摆脱alpha为1且gamma为4等的任何组合。

我该如何处理?

2 个答案:

答案 0 :(得分:2)

您正在寻找的是logical indexing

c1 = (combination(:,1) ~= 1); %rows where alpha is not 1
c2 = (combination(:,3) ~= 4); %rows where gamma is not 4

desired = combination(c1&c2,:); %output rows where both c1 and c2 are true

答案 1 :(得分:1)

如果您想根据该信息创建新数组,Ian Riley的答案提供了正确的方法。只要在他的回答中添加,您也可以使用相同的方法直接删除不需要的行,方法是将它们设置为空,即:

<?php

namespace App\Http\Controllers;

use App\Jobs\ImportCsv;
use Illuminate\Http\Request;
use App\Http\Controllers\Controller;

class FileController extends Controller
{
/**
 * Store a new file.
 *
 * @param  Request  $request
 * @return Response
 */
public function store(Request $request)
{
    // Create file...

    dispatch(new ImportCsv($file));
}
}