Неверно определена подматрица 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);

Будьте осторожны при сравнении двойных чисел, они не всегда (не) равны, когда вы ожидаете.

Другие вопросы по тегам