我有一个方形矩阵,我希望得到一个2乘n矩阵,它将按排序顺序包含矩阵索引。例如,我想从这个矩阵中获取
0 0 0
1 0 0
2 3 0
类似这样的事情
[3 2; 3 1; 2 1] ....
(3,2)是矩阵中最大元素的指数,(3,1)是第二大元素,依此类推。如果它可以忽略零(或NaN-s而不是零)将是好的。
关于矩阵的其他信息:它是正的,但不一定是3乘3,对角线元素和对角线上方的每个元素都是0或NaN(一个副问题,处理得更快,NaNs还是0?)
答案 0 :(得分:3)
这只考虑非零元素:
$i="0";
$max=$_POST['ivalue']; //total number of rows
++$max;
while ($i < $max)
{
$ID0 = "ID$i";
$name0 = "name$i";
$date0 = "rdate$i";
$start0 = "start-time$i";
$end0 = "end-time$i";
$location0 = "location$i";
$leavetype0= "leavetype$i";
$comment0 = "comment$i";
$users_ID = $_POST[$ID0];
$users_name = $_POST[$name0];
$users_date= $_POST[$date0];
$users_start = $_POST[$start0];
$users_end = $_POST[$end0];
$users_location = $_POST[$location0];
$users_leavetype = $_POST[$leavetype0];
$users_comment = $_POST[$comment0];
$users_ID = mysql_real_escape_string($users_ID);
$users_name = mysql_real_escape_string($users_name);
$users_date= mysql_real_escape_string($users_date);
$users_start = mysql_real_escape_string($users_start);
$users_end = mysql_real_escape_string($users_end);
$users_location = mysql_real_escape_string($users_location);
$users_leavetype = mysql_real_escape_string($users_leavetype);
$users_comment= mysql_real_escape_string($users_comment);
mysql_query("INSERT INTO `mydb_mydb`.`mydb` (`datename` `ID`, `name`, `location`, `start`, `end`, `date`, `Leavetype`, `comments`) VALUES ('$users_leavetype$users_date$users_name', '$users_ID', '$users_name', '$users_location', '$users_start', '$users_end', '$users_date', '$users_leavetype', '$users_comment') ON DUPLICATE KEY UPDATE `start`='$users_start', `end`='$users_end', `Leavetype`='$users_leavetype', `comments`= '$users_comment' ");
++$i;}
mysql_close();
?>
答案 1 :(得分:1)
假设您的矩阵在A
,您需要使用ind2sub
函数,
编辑删除零指数
[Ap, i] = sort(A(:), 'descend');
[r,c] = ind2sub(size(A), i);
orderedPairs = [r,c];
orderedPairsSansZeros = orderedPairs(Ap ~= 0, :);
答案 2 :(得分:0)
以下内容应该有效。矩阵sortix
是您正在寻找的。我用NaN替换了你的(1,3)元素中的零,所以你可以看到NaN没有出现在你的最终有序矩阵中。
matrix = [0, 0, NaN;
1, 3, 0;
2, 3, 0];
new_matrix = matrix;
%new_matrix(new_matrix(:)==0) = NaN; % uncomment to get rid of zeros
saveix = 1;
for i=1:length(matrix(:))
[maxVal, maxIndex] = max(new_matrix(:));
allMax = ismember(new_matrix, maxVal);
idx = find(allMax);
for ix=1:length(idx)
[sortix(saveix, 1), sortix(saveix, 2)] = ind2sub(size(matrix), ...
idx(ix));
saveix = saveix + 1;
end
new_matrix(idx) = NaN;
end