Неверно определена подматрица scilab
Я застрял при создании матрицы матрицы (вектор в данном случае)
Что у меня пока
index = zeros(size(A)) // This is some matrix but isn't important to the question
indexIndex = 1;
for rows=1:length(R)
for columns=1:length(K)
if(A(rows,columns)==x)
V=[rows columns]; // I create a vector holding the row + column
index(indexIndex) = V(1,2) // I want to store all these vectors
indexIndex = indexIndex + 1
end
end
end
Я пробовал различные способы получения информации из V (например, V(1:2)), но, похоже, ничего не работает правильно.
Другими словами, я пытаюсь получить массив баллов.
заранее спасибо
1 ответ
Я не понимаю вашего вопроса точно. Каков размер А? Что такое х, к и р? Но при некоторых предположениях,
Использование списка
Вы могли бы использовать список
// Create some matrix A
A = zeros(8,8)
//initialize the list
index = list();
// Get the dimensions of A
rows = size(A,1);
cols = size(A,2);
x = 0;
for row=1:rows
for col=1:cols
if(A(row,col)==x)
// Create a vector holding row and col
V=[row col];
// Append it to list using $ (last index) + 1
index($+1) = V
end
end
end
Одноиндексированные матрицы
Другой подход заключается в использовании факта, что многомерная матрица также может быть проиндексирована одним значением.
Например, создать случайную матрицу с именем a
:
-->a = rand(3,3)
a =
0.6212882 0.5211472 0.0881335
0.3454984 0.2870401 0.4498763
0.7064868 0.6502795 0.7227253
Доступ к первому значению:
-->a(1)
ans =
0.6212882
-->a(1,1)
ans =
0.6212882
Доступ ко второму значению:
-->a(2)
ans =
0.3454984
-->a(2,1)
ans =
0.3454984
Это доказывает, как работает единая индексация. Теперь, чтобы применить это к вашей проблеме и выбить цикл.
// Create some matrix A
A = zeros(8,8)
//initialize the array of indices
index = [];
// Get the dimensions of A
rows = size(A,1);
cols = size(A,2);
x = 0;
for i=1:length(A)
if(A(i)==x)
// Append it to list using $ (last index) + 1
index($+1) = i;
end
end
Без петли
Если вам просто нужны значения, которые соответствуют определенному условию, вы также можете сделать что-то вроде этого
values = A(A==x);
Будьте осторожны при сравнении двойных чисел, они не всегда (не) равны, когда вы ожидаете.