change only some cell values to a value of 1

3 vues (au cours des 30 derniers jours)
Conner Carriere
Conner Carriere le 12 Nov 2022
Réponse apportée : Voss le 12 Nov 2022
I want to change all the zeros in my cell to a value of 1. I know this could be done with a for and if statement, but is there anything that is faster?
Here is my data
[0,241,638,168]
[204,181,382,287;56,0,185,244]
[0,59,574,506]
[8,58,231,546]
[28,68,375,247]
[115,82,524,510]
Want it to look like this
[1,241,638,168]
[204,181,382,287;56,1,185,244]
[1,59,574,506]
[8,58,231,546]
[28,68,375,247]
[115,82,524,510]
Would it be some sort of cellfun() function?
  2 commentaires
Conner Carriere
Conner Carriere le 12 Nov 2022
A(A == 0) = 1 works for arrays, but not for cells.
Conner Carriere
Conner Carriere le 12 Nov 2022
{cat(1, a{1,1:4})} works alright once i convert it to a matrix, but then I would have to do a big for loop afterwards for each row. In the end I need a 4x1 cell with [x x x x]

Connectez-vous pour commenter.

Réponse acceptée

Voss
Voss le 12 Nov 2022
Yes, you can use cellfun with a helper function:
C = {
[0,241,638,168]
[204,181,382,287;56,0,185,244]
[0,59,574,506]
[8,58,231,546]
[28,68,375,247]
[115,82,524,510]
};
C_new = cellfun(@zeros2ones,C,'UniformOutput',false)
C_new = 6×1 cell array
{[ 1 241 638 168]} {2×4 double } {[ 1 59 574 506]} {[ 8 58 231 546]} {[ 28 68 375 247]} {[115 82 524 510]}
function A = zeros2ones(A)
A(A == 0) = 1;
end

Plus de réponses (0)

Catégories

En savoir plus sur Matrices and Arrays dans Help Center et File Exchange

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by