Προς το περιεχόμενο

Sarwsh pinaka me tyxaia seira! SOS!


CHRIS_MALL

Προτεινόμενες αναρτήσεις

Δημοσ.

Pws mporw na prospelasw ola ta dedomena enos pinaka i' mias mitras me tyxaia seira??

Endiaferomai gia glwssa Matlab alla epilyste to mou kai se opoia allh glwssa thelete akomh kai se psevdokwdika.

Efxaristw!

Δημοσ.

Θα χρησιμοποιήσεις μια συνάρτηση η οποία υπάρχει σε κάθε γλώσσα και επιστρέφει τυχαίους αριθμούς ανάλογα με κάποιο range που έχεις εσύ ορίσει. Έτσι , αντί να αναφέρεσαι σε κάποια συγκεκριμένη θέση του πίνακα , θα αναφέρεσαι στη θέση που θα έχει επιστρέψει η συνάρτηση δημιουργίας "τυχαίων" αριθμών.

Δημοσ.

Η δυσκολία δεν είναι στην τυχαία σειρά, είναι στο να μην πηγαίνεις στην ίδια θέση του πίνακα πάνω από μία φορά.

 

Αν ο πίνακάς σου είναι μικρός μπορείς να κάνεις το κλασσικό ανακάτεμα της τράπουλας:

>Για ι από 1 μέχρι όσες_φορές_θες_να_ανακατέψεις
 Αντιμετάθεσε(Τράπουλα[random], Τράπουλα[random])

Για να το εφαρμόσεις αυτό στον πίνακά σου θα χρειαστείς έναν ακόμα πίνακα ίδιων θέσεων, ο οποίος θα κρατάει τα index.

>Για ι από 1 μέχρι αριθμό_στοιχείων
 index[ι] = ι

Αν στη συνέχεια ανακατέψεις με τον προηγούμενο αλγόριθμο τον πίνακα index, τότε η πρόσβαση στον πίνακα Α γίνεται με

>Για ι από 1 μέχρι αριθμό_στοιχείων
 Α[index[ι]] = ό,τι θες να κάνεις...

Δημοσ.

To xew afto to opoio les,den nomizw pws me katalaves omws poly kala. PX:

a=[ 0 0 0 1 2

3 2 1 2 0]

thelw na prospelasw ta stoixeia me tyxaia seira.Na ta prospelasw omws ola ta stoixeia.Pws an mporeis grapsto mou se psevdokwdika i' se opoio kwdika glwssas theleis.

Se efxaristw

Δημοσ.
Η δυσκολία δεν είναι στην τυχαία σειρά' date=' είναι στο να μην πηγαίνεις στην ίδια θέση του πίνακα πάνω από μία φορά.

 

Αν ο πίνακάς σου είναι μικρός μπορείς να κάνεις το κλασσικό ανακάτεμα της τράπουλας:

>Για ι από 1 μέχρι όσες_φορές_θες_να_ανακατέψεις
 Αντιμετάθεσε(Τράπουλα[random], Τράπουλα[random])

Για να το εφαρμόσεις αυτό στον πίνακά σου θα χρειαστείς έναν ακόμα πίνακα ίδιων θέσεων, ο οποίος θα κρατάει τα index.

>Για ι από 1 μέχρι αριθμό_στοιχείων
 index[ι] = ι

Αν στη συνέχεια ανακατέψεις με τον προηγούμενο αλγόριθμο τον πίνακα index, τότε η πρόσβαση στον πίνακα Α γίνεται με

>Για ι από 1 μέχρι αριθμό_στοιχείων
 Α[index[ι]] = ό,τι θες να κάνεις...

[/quote']

 

Afto einai swsto file mou kai egw afto skeftomoun.Dystyxws omws an einai disdiastatos o pinakas tha xreiastw 2 pinakes index! Kalo tha itan an mporousame (toulaxiston se kwdika matlab ) na eixame 1 pinaka index pou omws kathe stoixeio tou tha itan 1 zevgos timwn pou tha to xrisimopoiousame meta me ton tropo pou proaneferes.

Δημοσ.

Δεν ξέρω καλά matlab για να σου πω πώς ορίζεται πίνακας με ζεύγος τιμών ανά στοιχείο, μπορώ όμως να σου πω εναλλακτικές:

 

1) Όρισε δύο πίνακες, indexX και indexY και όταν αντιμεταθέτεις τον ένα αντιμετάθεσε και τον άλλο. Simple!

 

2) Όρισε έναν πίνακα index και για στοιχεία του βάλε

αριθμός_στηλών*i + j

ώστε σε έναν αριθμό να έχεις και το i και το j του στοιχείου.

 

Μετά τις αντιμεταθέσεις για να βρεις την γραμμή κάνεις

index[] div αριθμός_στηλών

και για την στήλη

index[] mod αριθμός_στηλών

Δημοσ.
Δεν ξέρω καλά matlab για να σου πω πώς ορίζεται πίνακας με ζεύγος τιμών ανά στοιχείο' date=' μπορώ όμως να σου πω εναλλακτικές:

 

1) Όρισε δύο πίνακες, indexX και indexY και όταν αντιμεταθέτεις τον ένα αντιμετάθεσε και τον άλλο. Simple!

 

2) Όρισε έναν πίνακα index και για στοιχεία του βάλε

αριθμός_στηλών*i + j

ώστε σε έναν αριθμό να έχεις και το i και το j του στοιχείου.

 

Μετά τις αντιμεταθέσεις για να βρεις την γραμμή κάνεις

index['] div αριθμός_στηλών

και για την στήλη

index[] mod αριθμός_στηλών

file se efxaristw para poly! O 2os tropos sou einai katapliktikos kai poly exypnos! Den eimai sigouros omws gia to ti ennoeis me ti diadikasia anekatwmatos trapoulas.An den sou einai kopos mporeis na mou exhghseis?

Se efxaristw poly pantws!

Δημοσ.

Παράδειγμα με μονοδιάστατο πίνακα για να είναι πιο κατανοητό:

index = (1, 2, 3, 4, 5)

 

Ο κώδικας είπαμε είναι

>Για ι από 1 μέχρι όσες_φορές_θες_να_ανακατέψεις
 Αντιμετάθεσε(Τράπουλα[random], Τράπουλα[random])

 

1η επανάληψη:

random = 2, random = 4

δηλαδή να αντιμεταθέσω τα περιεχόμενα της θέσης 2 με της 4:

index = (1, 4, 3, 2, 5)

 

2η επανάληψη:

random = 3, random = 4

δηλαδή να αντιμεταθέσω τα περιεχόμενα της θέσης 3 με της 4:

index = (1, 4, 2, 3, 5)

 

3η επανάληψη:

random = 3, random = 3

δηλαδή να αντιμεταθέσω τα περιεχόμενα της θέσης 3 με της 3:

index = (1, 4, 3, 2, 5)

 

κτλ.

 

Κάνοντας αυτό μερικές φορές ανακατεύονται αρκετά οι αριθμοί οπότε τελικά θα έχεις κάτι σαν

index = (5, 1, 2, 4, 3)

 

Για να προσπελάσεις τον πίνακα κάνεις

Α[index[ι]]

δηλαδή προσπελαύνεις πρώτα το 5ο στοιχείο, μετά το 1ο κτλ

 

Αν έχεις απορία ask again.

Επίσης αντί να χρησιμοποιείς index θα μπορούσες να ανακατεύεις κατευθείαν τα στοιχεία του πίνακα.

Αν έχεις προβλήματα RAM (τεράστιοι πίνακες κτλ) υπάρχουν κι άλλοι τρόποι αλλά πιο σύνθετοι.

 

Επίσης θεωρώ πιθανό το matlab να έχει έτοιμη ρουτίνα ανακατέματος πίνακα!!!

Δημοσ.

Οριστε σε κωδικα MatLab αυτο που ζητησες.

>
clear
A = [1 2 3; 4 5 6; 7 8 9]
test = zeros(length(A))
final = ones(length(A))
check = 0
while check ~= 1
   temp = randint(1,1,[1,size(A,1)*size(A,2)])
   if test(temp) == 0
       %do what ever you want with matrix element
       test(temp) = 1
   end
   check = isequal(test,final)
   if check == 1, break, end
end

 

Αν εχεις απορια για τις εντολες κοιταξε στο help του Matlab και αν δεν βγαλεις ακρη πες. Γινεται σιγουρα και πιο απλα με εξοικονομηση ενος πινακα αλλα δεν εβρισκα την καταλληλη εντολη. Ο κωδικας ειναι γραμμενος ετσι ωστε να δουλευει για καθε πινακα Α mxn.

Δημοσ.
Οριστε σε κωδικα MatLab αυτο που ζητησες.

>
clear
A = [1 2 3; 4 5 6; 7 8 9]
test = zeros(length(A))
final = ones(length(A))
check = 0
while check ~= 1
   temp = randint(1,1,[1,size(A,1)*size(A,2)])
   if test(temp) == 0
       %do what ever you want with matrix element
       test(temp) = 1
   end
   check = isequal(test,final)
   if check == 1, break, end
end

 

Αν εχεις απορια για τις εντολες κοιταξε στο help του Matlab και αν δεν βγαλεις ακρη πες. Γινεται σιγουρα και πιο απλα με εξοικονομηση ενος πινακα αλλα δεν εβρισκα την καταλληλη εντολη. Ο κωδικας ειναι γραμμενος ετσι ωστε να δουλευει για καθε πινακα Α mxn.

File den to pistevw...exw Matlab version 5.3 Student Edition kai den mou anagnwrizei tin entolh randint. Exeis na proteineis kati allo. Afto pou leei o Alkis to exw katalavei alla den mporw na vrw sinartisi random pou na orizw egw to evros twn timwn pou thelw na kanei randomize.

Paidia sas efxaristw poly pantws!

Δημοσ.

Παρε τον παρακατω κωδικα και σωστον σε ενα αρχειο randint.m μεσα στον ιδιο φακελο με το αλλο σου m file. Απ'οτι ειδα εχει καποια dependancies, αλλα δεν ξερω αν θα τα εχει το 5.3. Αμα δεν δουλεψει και ετσι δε μου ερχεται καποια αλλη συναρτηση για να κανεις τη δουλεια σου. Κοιταξε αλλο αλγοριθμο..

 

>
function out = randint(varargin);
%RANDINT Generate matrix of uniformly distributed random integers.
%   OUT = RANDINT generates a "0" or "1" with equal probability.
%
%   OUT = RANDINT(M) generates an M-by-M matrix of random binary numbers.
%   "0" and "1" occur with equal probability.
%
%   OUT = RANDINT(M,N) generates an M-by-N matrix of random binary numbers.
%   "0" and "1" occur with equal probability.
%
%   OUT = RANDINT(M,N,RANGE) generates an M-by-N matrix of random integers.
%
%   RANGE can be either a scalar or a two-element vector:
%   Scalar : If RANGE is a positive integer, then the output integer
%            range is [0, RANGE-1].  If RANGE is a negative integer,
%            then the output integer range is [RANGE+1, 0].
%   Vector : If RANGE is a two-element vector, then the output
%            integer range is [RANGE(1), RANGE(2)].
%
%   OUT = RANDINT(M,N,RANGE,STATE) resets the state of RAND to STATE.
%
%   Examples:
%   » out = randint(2,3)               » out = randint(2,3,4)
%   out =                              out =
%        0     0     1                      1     0     3
%        1     0     1                      2     3     1
%
%   » out = randint(2,3,-4)            » out = randint(2,3,[-2 2])
%   out =                              out =
%       -3    -1    -2                     -1     0    -2
%       -2     0     0                      1     2     1
%
%   See also RAND, RANDSRC, RANDERR.

%   Copyright 1996-2001 The MathWorks, Inc.
%   $Revision: 1.18 $  $Date: 2001/04/23 15:32:45 $


% Basic function setup.
error(nargchk(0,4,nargin));

% --- Placeholder for the signature string.
sigStr = '';
m = [];
n = [];
range = [];
state = [];

% --- Identify string and numeric arguments
for i=1:nargin
  if(i>1)
     sigStr(size(sigStr,2)+1) = '/';
  end;
  % --- Assign the string and numeric flags
  if(isnumeric(varargin{i}))
     sigStr(size(sigStr,2)+1) = 'n';
  else
     error('Only numeric arguments are accepted.');
  end;
end;

% --- Identify parameter signitures and assign values to variables
switch sigStr
  % --- randint
  case ''

  % --- randint(m)
  case 'n'
     m		= varargin{1};

% --- randint(m, n)
case 'n/n'
     m		= varargin{1};
     n		= varargin{2};

% --- randint(m, n, range)
case 'n/n/n'
     m		= varargin{1};
     n  	= varargin{2};
     range = varargin{3};

% --- randint(m, n, range, state)
case 'n/n/n/n'
     m		= varargin{1};
     n		= varargin{2};
     range = varargin{3};
     state = varargin{4};

  % --- If the parameter list does not match one of these signatures.
  otherwise
     error('Syntax error.');
end;

if isempty(m)
  m = 1;
end
if isempty(n)
  n = m;
end
if isempty(range)
  range = [0, 1];
end

len_range = size(range,1) * size(range,2);

% Typical error-checking.
if (~isfinite(m)) | (~isfinite(n))
  error('Matrix dimensions must be finite.');
elseif (floor(m) ~= m) | (floor(n) ~= n) | (~isreal(m)) | (~isreal(n))
  error('Matrix dimensions must be real integers.');
elseif (m < 0) | (n < 0)
  error('Matrix dimensions must be positive.');
elseif (length(m) > 1) | (length(n) > 1)
  error('Matrix dimensions must be scalars.');
elseif len_range > 2
  error('The RANGE parameter should contain no more than two elements.');
elseif max(max(floor(range) ~= range)) | (~isreal(range)) | (~isfinite(range))
  error('The RANGE parameter must only contain real finite integers.');
end

% If the RANGE is specified as a scalar.
if len_range < 2
 if range < 0
      range = [range+1, 0];
   elseif range > 0
      range = [0, range-1];
   else
      range = [0, 0];    % Special case of zero range.
   end
end

% Make sure RANGE is ordered properly.
range = sort(range);

% Calculate the range the distance for the random number generator.
distance = range(2) - range(1);

% Set the initial state if specified.
if ~isempty(state)
  rand('state', state);
end

% Generate the random numbers.
r = floor(rand(m, n) * (distance+1));

% Offset the numbers to the specified value.
out = ones(m,n)*range(1);
out = out + r;

% [EOF] randint.m

Δημοσ.
Παρε τον παρακατω κωδικα και σωστον σε ενα αρχειο randint.m μεσα στον ιδιο φακελο με το αλλο σου m file. Απ'οτι ειδα εχει καποια dependancies' date=' αλλα δεν ξερω αν θα τα εχει το 5.3. Αμα δεν δουλεψει και ετσι δε μου ερχεται καποια αλλη συναρτηση για να κανεις τη δουλεια σου. Κοιταξε αλλο αλγοριθμο..

 

>
function out = randint(varargin);
%RANDINT Generate matrix of uniformly distributed random integers.
%   OUT = RANDINT generates a "0" or "1" with equal probability.
%
%   OUT = RANDINT(M) generates an M-by-M matrix of random binary numbers.
%   "0" and "1" occur with equal probability.
%
%   OUT = RANDINT(M,N) generates an M-by-N matrix of random binary numbers.
%   "0" and "1" occur with equal probability.
%
%   OUT = RANDINT(M,N,RANGE) generates an M-by-N matrix of random integers.
%
%   RANGE can be either a scalar or a two-element vector:
%   Scalar : If RANGE is a positive integer, then the output integer
%            range is [0, RANGE-1].  If RANGE is a negative integer,
%            then the output integer range is [RANGE+1, 0].
%   Vector : If RANGE is a two-element vector, then the output
%            integer range is [RANGE(1), RANGE(2)].
%
%   OUT = RANDINT(M,N,RANGE,STATE) resets the state of RAND to STATE.
%
%   Examples:
%   » out = randint(2,3)               » out = randint(2,3,4)
%   out =                              out =
%        0     0     1                      1     0     3
%        1     0     1                      2     3     1
%
%   » out = randint(2,3,-4)            » out = randint(2,3,[-2 2])
%   out =                              out =
%       -3    -1    -2                     -1     0    -2
%       -2     0     0                      1     2     1
%
%   See also RAND, RANDSRC, RANDERR.

%   Copyright 1996-2001 The MathWorks, Inc.
%   $Revision: 1.18 $  $Date: 2001/04/23 15:32:45 $


% Basic function setup.
error(nargchk(0,4,nargin));

% --- Placeholder for the signature string.
sigStr = '';
m = [];
n = [];
range = [];
state = [];

% --- Identify string and numeric arguments
for i=1:nargin
  if(i>1)
     sigStr(size(sigStr,2)+1) = '/';
  end;
  % --- Assign the string and numeric flags
  if(isnumeric(varargin{i}))
     sigStr(size(sigStr,2)+1) = 'n';
  else
     error('Only numeric arguments are accepted.');
  end;
end;

% --- Identify parameter signitures and assign values to variables
switch sigStr
  % --- randint
  case ''

  % --- randint(m)
  case 'n'
     m		= varargin{1};

% --- randint(m, n)
case 'n/n'
     m		= varargin{1};
     n		= varargin{2};

% --- randint(m, n, range)
case 'n/n/n'
     m		= varargin{1};
     n  	= varargin{2};
     range = varargin{3};

% --- randint(m, n, range, state)
case 'n/n/n/n'
     m		= varargin{1};
     n		= varargin{2};
     range = varargin{3};
     state = varargin{4};

  % --- If the parameter list does not match one of these signatures.
  otherwise
     error('Syntax error.');
end;

if isempty(m)
  m = 1;
end
if isempty(n)
  n = m;
end
if isempty(range)
  range = [0, 1];
end

len_range = size(range,1) * size(range,2);

% Typical error-checking.
if (~isfinite(m)) | (~isfinite(n))
  error('Matrix dimensions must be finite.');
elseif (floor(m) ~= m) | (floor(n) ~= n) | (~isreal(m)) | (~isreal(n))
  error('Matrix dimensions must be real integers.');
elseif (m < 0) | (n < 0)
  error('Matrix dimensions must be positive.');
elseif (length(m) > 1) | (length(n) > 1)
  error('Matrix dimensions must be scalars.');
elseif len_range > 2
  error('The RANGE parameter should contain no more than two elements.');
elseif max(max(floor(range) ~= range)) | (~isreal(range)) | (~isfinite(range))
  error('The RANGE parameter must only contain real finite integers.');
end

% If the RANGE is specified as a scalar.
if len_range < 2
 if range < 0
      range = [range+1, 0];
   elseif range > 0
      range = [0, range-1];
   else
      range = [0, 0];    % Special case of zero range.
   end
end

% Make sure RANGE is ordered properly.
range = sort(range);

% Calculate the range the distance for the random number generator.
distance = range(2) - range(1);

% Set the initial state if specified.
if ~isempty(state)
  rand('state', state);
end

% Generate the random numbers.
r = floor(rand(m, n) * (distance+1));

% Offset the numbers to the specified value.
out = ones(m,n)*range(1);
out = out + r;

% [EOF] randint.m

[/quote']

File to mono pou exw na pw einai oti your name einai Nobody!!!!! Se efxaristw para poly! Mou eleises ta xeria!

Thank you! :grin:

Δημοσ.
Οριστε σε κωδικα MatLab αυτο που ζητησες.

>
clear
A = [1 2 3; 4 5 6; 7 8 9]
test = zeros(length(A))
final = ones(length(A))
check = 0
while check ~= 1
   temp = randint(1,1,[1,size(A,1)*size(A,2)])
   if test(temp) == 0
       %do what ever you want with matrix element
       test(temp) = 1
   end
   check = isequal(test,final)
   if check == 1, break, end
end

 

Αν εχεις απορια για τις εντολες κοιταξε στο help του Matlab και αν δεν βγαλεις ακρη πες. Γινεται σιγουρα και πιο απλα με εξοικονομηση ενος πινακα αλλα δεν εβρισκα την καταλληλη εντολη. Ο κωδικας ειναι γραμμενος ετσι ωστε να δουλευει για καθε πινακα Α mxn.

 

Dokimasa ton parapanw kwdika gia ton pinaka 1x7:

i =

 

12 13 23 24 34 45 53

kai mou ekane atermwn vroxo.Giati?

Δημοσ.

Δικο μου λαθος. Γενικα εχεις ιδεα απο Matlab? Ψαξτο και λιγακι. Δες τι κανουν οι εντολες για να καταλαβεις που ειναι το λαθος... Δεν εβαλα ερωτηματικα στο τελος των εντολων ακριβως για να βλεπεις τι κανει το προγραμμα καθως εκτελειται.

Αυτος ειναι ο σωστος κωδικας.

>
clear
A = [12 13 23 24 34 45 53]
test = zeros(size(A))
final = ones(size(A))
check = 0
while check ~= 1
   temp = randint(1,1,[1,size(A,1)*size(A,2)])
   if test(temp) == 0
       %do what ever you want with matrix element
       test(temp) = 1
   end
   check = isequal(test,final)
   if check == 1, break, end
end

Αρχειοθετημένο

Αυτό το θέμα έχει αρχειοθετηθεί και είναι κλειστό για περαιτέρω απαντήσεις.

  • Δημιουργία νέου...