това е моята матрица, която показва примерна мрежова графика
matrix =
0 1 1 1
1 0 1 0
0 0 0 1
1 1 1 0
където е матрица 4x4
1) 2) 3) 4)
1) 0 1 1 1
2) 1 0 1 0
3) 0 0 0 1
4) 1 1 1 0
Искам да преброя тази матрица 4х4 ред 1 брои колко 1s имам и добавя колона 1 число от 1 "към него и връща 1) = 5 като общо 1" s в ред 1 и col 1 = 5
Искам продукцията ми да е като
1=5
2=4
3=4
4=5
Отговори:
1 за отговор № 1Това трябва да бъде -
out = sum([matrix matrix"],2)
Примерно изпълнение -
matrix =
1 1 1 1
1 0 0 0
0 1 0 1
0 0 1 1
out =
6
3
4
5
Горният код ще брои 1 пъти два пъти, когато се появи на диагонала, което ако не искате, използвайте това -
out1 = sum([matrix matrix"],2) - diag(matrix)
Примерно изпълнение -
matrix =
1 1 1 1
1 0 0 0
0 1 0 1
0 0 1 1
out1 =
5
3
4
4
1 за отговор № 2
Съгласен съм с отговора на Divakar, но след като вашата графика стане все по-голяма, може да не искате да транспонирате цялата матрица. Предлагам първо да направите сумата и след това да я трансформирате:
sum(matrix,1)"+sum(matrix,2)-diag(matrix);
matrix =
0 1 1 1
1 0 1 0
0 0 0 1
1 1 1 0
degree=sum(matrix,1)"+sum(matrix,2)-diag(matrix)
degree =
5
4
4
5