所以我有一个矩阵(n行×m列),想要找到连接最多的区域“1s”。例如,如果我有以下矩阵:
1 1 0 0
0 1 1 0
0 0 1 0
1 0 0 0
矩阵中有2个“1s”区域。
第一区:
1 1
1 1
1
第二区:
1
我想创建一个输出最大值= 5的算法。我认为这与Depth First Search有关,但我只有基本R并可以访问一些包。
答案 0 :(得分:3)
您可以使用SDMTools
。首先,我们将矩阵转换为raster
,然后检测连接单元格的clump
s(补丁)。每个丛都有一个唯一的ID。 NA和零用作背景值。最后,PatchStat
提供每个补丁的统计信息。
library(raster)
library(SDMTools)
r <- raster(mat)
rc <- clump(r)
as.matrix(rc)
[,1] [,2] [,3] [,4] [,5] [1,] NA 1 1 1 1 [2,] 1 NA NA 1 NA [3,] 1 1 1 NA 1 [4,] NA NA NA NA NA [5,] 2 2 NA NA NA
p <- PatchStat(rc)
max(p$n.cell)
[1] 10
示例数据
set.seed(2)
m <- 5
n <- 5
mat <- round(matrix(runif(m * n), m, n))
mat
[,1] [,2] [,3] [,4] [,5] [1,] 0 1 1 1 1 [2,] 1 0 0 1 0 [3,] 1 1 1 0 1 [4,] 0 0 0 0 0 [5,] 1 1 0 0 0
答案 1 :(得分:2)
我最终使用public function login($username, $password){
$this->db->select('name, password');
$this->db->where('name', $username);
$this->db->where('password', $password);
$query = $this->db->get('suppliers');
if($query->num_rows() > 0)
{
$row = $query->row();
$data = array(
'id' => $row->id,
'name' => $row->name,
);
$this->session->set_userdata($data);
return true;
}
return false;
}
:
public function login(){
$username = $this->security->xss_clean($this->input->post('username'));
$password = $this->security->xss_clean($this->input->post('password'));
if($this->Supplogin_model->login($username, $password)){
$this->session->set_flashdata('message', 'You are successfully logged in.');
redirect("Supplier_login/supplierlogin");
}
else{
$this->session->set_flashdata('error', 'Sorry Unsuccessfull login. Try again.');
redirect("Supplier_login/supp_login");
}
}