WICHTIG: Der Betrieb von goMatlab.de wird privat finanziert fortgesetzt. - Mehr Infos...

Mein MATLAB Forum - goMatlab.de

Mein MATLAB Forum

 
Gast > Registrieren       Autologin?   

Partner:




Forum
      Option
[Erweitert]
  • Diese Seite per Mail weiterempfehlen
     


Gehe zu:  
Neues Thema eröffnen Neue Antwort erstellen

Bestimmter Bereich in Array

 

wusa
Forum-Anfänger

Forum-Anfänger


Beiträge: 42
Anmeldedatum: 20.06.17
Wohnort: Berlin
Version: 2021
     Beitrag Verfasst am: 11.04.2021, 22:45     Titel: Bestimmter Bereich in Array
  Antworten mit Zitat      
Hallo!
Ich will den nicht gewünschten Bereich mit Nullen füllen.
Kann man das einfacher machen?
Code:

clear all; close all; clc

a =    [1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20];

%  GESUCHTE AUSGABE
%  a = [0 0 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 0 0];

largeEnough = a >= 3;
smallEnough = a <= 18;

% bereich = find(largeEnough & smallEnough);
% a(~bereich) = 0;

[r, c, v] = find(largeEnough & smallEnough);
a(1, 1:c-1) = 0;
a(1, c(end)+1:a(end)) = 0;
 

Viele Grüße
Michael

BereichSkript.m
 Beschreibung:

Download
 Dateiname:  BereichSkript.m
 Dateigröße:  384 Bytes
 Heruntergeladen:  133 mal
Private Nachricht senden Benutzer-Profile anzeigen


Harald
Forum-Meister

Forum-Meister


Beiträge: 24.448
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2017b
     Beitrag Verfasst am: 11.04.2021, 23:24     Titel:
  Antworten mit Zitat      
Hallo,

was genau ist denn "der nicht gewünschte Bereich"? Das Beispiel lässt verschiedene Interpretationsmöglichkeiten, z.B.
- der Teil, bevor das erste Mal ein Wert zwischen 3 und 18 angenommen wird und der Teil, nachdem das erste Mal ein Wert zwischen 3 und 18 angenommen wird
- alle Werte außerhalb [3, 18]
In deinem Beispiel ist beides gleichbedeutend, aber das muss ja für reale Datensätze nicht so sein. Du hast beide Varianten programmiert.
In der ersten kannst du das find sogar weglassen. Die zweite kann man etwas vereinfachen / verbessern:
Code:
c = find(largeEnough & smallEnough);
a(1:c(1)-1) = 0;
a(c(end)+1:end) = 0;


Grüße,
Harald
_________________

1.) Ask MATLAB Documentation
2.) Search gomatlab.de, google.de or MATLAB Answers
3.) Ask Technical Support of MathWorks
4.) Go mad, your problem is unsolvable ;)
Private Nachricht senden Benutzer-Profile anzeigen
 
wusa
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 42
Anmeldedatum: 20.06.17
Wohnort: Berlin
Version: 2021
     Beitrag Verfasst am: 11.04.2021, 23:31     Titel:
  Antworten mit Zitat      
Zweites Problem
Ich habe nun das Array transponiert. Zusätzlich habe ich eine zweite Spalte.

In der ersten Spalte habe ich also am Anfang zwei Zeilen mit 0 sowie die letzten beiden. Siehe Bild_1.

Wie kriege ich insgesamt die Zeilen 1, 2 und 19, 20 für beide Spalten weg?

Wenn ich das mit nonzeros probiere, habe ich plötzlich nur noch eine Spalte in a.

Ich will aber die zweite Spalte behalten, nur um die Reihen gekürzt wie geplant.
Code:

a = [0 0 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 0 0;
      11 22 33 44 55 66 77 88 99 1010 1111 1212 1313 1414 1515 1616 1717 1818 1919 2020]';

largeEnough = a >= 3;
smallEnough = a <= 18;

% [r, c, v] = find(largeEnough & smallEnough);
% a(1:r-1, 1) = 0;
% a(r(end)+1:a(end)) = 0;

a = nonzeros(a);    
 


BereichSkript.m
 Beschreibung:
Skript

Download
 Dateiname:  BereichSkript.m
 Dateigröße:  429 Bytes
 Heruntergeladen:  119 mal
Private Nachricht senden Benutzer-Profile anzeigen
 
wusa
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 42
Anmeldedatum: 20.06.17
Wohnort: Berlin
Version: 2021
     Beitrag Verfasst am: 11.04.2021, 23:33     Titel:
  Antworten mit Zitat      
Hallo Harald,

danke!

Der nicht gewünschte Bereich ist in Ziffern ausgedrückt: 1,2, 19, 20

Also vor 3 die Ziffern und nach 18 die Ziffern.

Grüße
Michael
Private Nachricht senden Benutzer-Profile anzeigen
 
wusa
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 42
Anmeldedatum: 20.06.17
Wohnort: Berlin
Version: 2021
     Beitrag Verfasst am: 11.04.2021, 23:35     Titel:
  Antworten mit Zitat      
Das Bild fehlte noch.

Bild_1_.jpg
 Beschreibung:
Bild

Download
 Dateiname:  Bild_1_.jpg
 Dateigröße:  868.44 KB
 Heruntergeladen:  119 mal
Private Nachricht senden Benutzer-Profile anzeigen
 
wusa
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 42
Anmeldedatum: 20.06.17
Wohnort: Berlin
Version: 2021
     Beitrag Verfasst am: 12.04.2021, 06:50     Titel:
  Antworten mit Zitat      
Ich hab's:
Code:

a = [0 0 3 4 5 6 7 0 9 10 11 12 13 14 15 16 17 18 0 0;
      11 22 33 44 55 66 77 88 99 1010 1111 1212 1313 1414 1515 1616 1717 1818 1919 2020]';

% a(sum((a==0),2)>0,: )=[];      % erste Option zum loeschen der 0er Zeilen
 
a(~a(:,1),:) = [];               % zweite Option
 
Private Nachricht senden Benutzer-Profile anzeigen
 
Neues Thema eröffnen Neue Antwort erstellen



Einstellungen und Berechtigungen
Beiträge der letzten Zeit anzeigen:

Du kannst Beiträge in dieses Forum schreiben.
Du kannst auf Beiträge in diesem Forum antworten.
Du kannst deine Beiträge in diesem Forum nicht bearbeiten.
Du kannst deine Beiträge in diesem Forum nicht löschen.
Du kannst an Umfragen in diesem Forum nicht mitmachen.
Du kannst Dateien in diesem Forum posten
Du kannst Dateien in diesem Forum herunterladen
.





 Impressum  | Nutzungsbedingungen  | Datenschutz | FAQ | goMatlab RSS Button RSS

Hosted by:


Copyright © 2007 - 2024 goMatlab.de | Dies ist keine offizielle Website der Firma The Mathworks

MATLAB, Simulink, Stateflow, Handle Graphics, Real-Time Workshop, SimBiology, SimHydraulics, SimEvents, and xPC TargetBox are registered trademarks and The MathWorks, the L-shaped membrane logo, and Embedded MATLAB are trademarks of The MathWorks, Inc.