Подсчет количества элементов в matlab

#matlab

#matlab

Вопрос:

Я новичок в MATLAB. Предположим, у меня есть вектор, подобный x = [1 1 1 1 1 1 0 0 1 0]. Я хочу вычислить общее количество элементов в векторе и количество ненулевых элементов в векторе. Затем определите соотношение обоих чисел. Я ищу в справке MATLAB. как сделать подсчет элементов, но до сих пор мне не везло. Если кто-нибудь окажет мне помощь, это было бы большим подспорьем. Заранее спасибо.

Ответ №1:

Вы можете получить количество элементов с помощью numel(x) .

Вы можете получить количество ненулей с помощью sum(x ~= 0) .

Таким образом, соотношение равно одному, деленному на другое.

Комментарии:

1. @Oli: Спасибо за ваш быстрый ответ, я использую all (x ==1), чтобы проверить, содержит ли вектор x все ненулевые элементы или нет. Но даже если у меня есть вектор, подобный x = [0 0 0 0 0 0 ], все (x == 1) дает мне ИСТИННОЕ значение, можете ли вы сказать мне, почему это так?

2. @user: Это дает мне значение false, а не true.

3. Ооо … извините за мой проступок … предположим, я хотел проверить, все ли мои элементы равны нулю, будут ли все (x == 0) работать?

4. @user: Да, это сработало бы. В качестве альтернативы, ~any(x) сработало бы.

5. @Oli: Более быстрый подход к ненулевым элементам, который работает только для булевых векторов, таких как этот, — это внутреннее произведение. Если x это вектор-столбец, x'*x выдает тот же ответ, что и nnz или sum() , и на порядок быстрее.

Ответ №2:

Правильный способ найти количество ненулевых элементов (в общем случае) — использовать nnz() функцию; использование sum() также работает в этом конкретном случае, но не сработает, если в используемой матрице есть числа, отличные от нуля и единицы. Поэтому, чтобы вычислить общее количество элементов, ненулевое количество элементов и соотношение, используйте код, подобный этому:

 x = [1 1 1 1 1 1 0 0 1 0];
nonzeroes = nnz(x);
total = numel(x);
ratio = nonzeroes / total;
  

Ответ №3:

Отношение ненулевых элементов ко всем элементам в векторе равно:

 r = length(find(x)) / length(x)
  

То, что length делает, отчасти очевидно. find дает вам индекс всех ненулевых элементов.

Редактировать: Исправлена ошибка с использованием size вместо length.

Комментарии:

1. Нет, потому что size не дает вам скаляр!

2. @Darhuuk: Удалено -1. Но numel это более общее решение, чем четное length (рассмотрим, что произойдет, если x это матрица, а не вектор).

3. @Oli-Charlesworth Хорошая мысль, я думал о том же, когда вы ввели свой комментарий и уже обновили мой ответ, чтобы уточнить.

Ответ №4:

a= numel(find(x))/numel(x) это еще один способ сделать это.