我想创建一个随机矩阵,以便每列的总和为1,每行按升序排列。我想要这个矩阵来解决以下问题: 我有一个单元格数组P {k}(r,a),每个单元格是一个随机矩阵,并且必须具有以下条件:
1)阵列每个单元格中矩阵的每列总和应等于1
∀k,Σp{k}(r,a)= 1
2)在阵列单元中矩阵的每列之间,必须满足以下条件 为k'> k P {k'}(r,a)> p {k}(r,a)
我写了这段代码,但没有提供第一个条件:
var a = [
{name: "john", id: 200, points: "333"},
{name: "alice", id: 302, points: "20"},
{name: "alice", id: 302, points: "13"},
{name: "kevin", id: 501, points: "3"},
{name: "adam", id: 999, points: "100"},
{name: "adam", id: 999, points: "30"},
{name: "adam", id: 999, points: "60"},
];
var o = {};
a.forEach((i) => {
var id = i.id;
i.points = parseInt(i.points)
if (!o[id]) {
return o[id] = i
}
return o[id].points = o[id].points + i.points
})
console.log(o)
var a2 = []
Object.keys(o).forEach((key) => {
a2.push(o[key])
})
console.log(a2)
答案 0 :(得分:1)
这可能有效但随机生成并不均匀。告诉我,如果它不是你正在寻找的东西。
rowMax = 10;
columnMax = 11;
for i = 1:columnMax
val = 1;
for j = 1:rowMax-1
r = rand();
M(i, j) = val*r;
val -= val*r;
end
M(i, rowMax) = val;
M(i, :) = sort(M(i, :));
end
答案 1 :(得分:1)
你可以试试这段代码,
n=3;%Number of rows
m=2;%Number of columns
A =rand(n,m)% create a random matrix
A_s=sort(A,2)% arrang/sort rows in ascending order
A_n=normc(A_s)% Normalize columns of matrix (sum of A columns is one)
如果你试试这个,你可能会得到类似的东西,
A =
0.7572 0.5678
0.7537 0.0759
0.3804 0.0540
A_s =
0.5678 0.7572
0.0759 0.7537
0.0540 0.3804
A_n =
0.9868 0.6677
0.1318 0.6646
0.0938 0.3355
代码可以进一步简化,但只是想说清楚。如果您有任何其他问题或需要进一步澄清,请与我们联系。
答案 2 :(得分:0)