What is the Matlab equivalent of the yield keyword in Python?

2024/9/30 21:28:56

I need to generate multiple results but one at a time, as opposed to everything at once in an array.

How do I do that in Matlab with a generator like syntax as in Python?

Answer

When executing functions that use the yield keyword, they actually return a generator. Generators are a type of iterators. While MATLAB does not provide the syntax for either, you can implement the "iterator interface" yourself. Here is an example similar to xrange function in python:

classdef rangeIterator < handleproperties (Access = private)inendmethodsfunction obj = rangeIterator(n)obj.i = 0;obj.n = n;endfunction val = next(obj)if obj.i < obj.nval = obj.i;obj.i = obj.i + 1;elseerror('Iterator:StopIteration', 'Stop iteration')endendfunction reset(obj)obj.i = 0;endend
end

Here is how we use the iterator:

r = rangeIterator(10);
try% keep call next() method until it throws StopIterationwhile truex = r.next();disp(x);end
catch ME% if it is not the "stop iteration" exception, rethrow it as an errorif ~strcmp(ME.identifier,'Iterator:StopIteration')rethrow(ME);end
end

Note the when using the construct for .. in .. in Python on iterators, it internally does a similar thing.

You could write something similar using regular functions instead of classes, by using either persistent variables or a closure to store the local state of the function, and return "intermediate results" each time it is called.

https://en.xdnf.cn/q/71039.html

Related Q&A

Convert from CMYK to RGB

Im having trouble converting a single page pdf (CMYK) to a jpg (RGB). When I use the code below, the colors in the jpg image are garish. Ive tried reading through the Wand docs, but havent found anythi…

TopologicalError: The operation GEOSIntersection_r could not be performed

Hi Guys, I am trying to map the district shapefile into assembly constituencies. I have shape files for [Both].Basically I have to map all the variables given at district level in census data to assemb…

Plot a function during debugging in Python

I used to work in Matlab and it is really convenient (when working with big arrays/matrices and nested functions) to visualize intermediate results during debugging using plot function. In Python I can…

getting last n items from queue

everything I see is about lists but this is about events = queue.queue() which is a queue with objects that I want to extract, but how would I go about getting the last N elements from that queue?

Paramiko ValueError p must be exactly 1024, 2048, or 3072 bits long

I am trying to connect SFTP using Python script. Im unable to connect due to "p error".import paramiko client = paramiko.SSHClient() client.load_system_host_keys() client.connect(####.com, us…

WindowsError: [Error 5] Access is denied using urllib2

Im getting a "WindowsError: [Error 5] Access is denied" message when reading a website with urllib2. from urllib2 import urlopen, Request from bs4 import BeautifulSouphdr = {User-Agent: Mozil…

Send key combination with python

I want to be able to send the key combination SHIFT + CTRL + . (dot) using the following code:import win32com.client as comclt wsh= comclt.Dispatch("WScript.Shell") wsh.SendKeys() So far I wa…

Taking data from drop-down menu using flask

Im completely new to flask, and really am completely lost with how to approach this. Ive looked into other SO questions but I cant seem to get this working regardless. I have a form as such: <form…

How to get list_blobs to behave like gsutil

I would like to only get the first level of a fake folder structure on GCS.If I run e.g.:gsutil ls gs://gcp-public-data-sentinel-2/tiles/I get a list like this:gs://gcp-public-data-sentinel-2/tiles/01/…

How to avoid gcc warning in Python C extension when using Py_BEGIN_ALLOW_THREADS

The simplest way to manipulate the GIL in Python C extensions is to use the macros provided:my_awesome_C_function() {blah;Py_BEGIN_ALLOW_THREADS// do stuff that doesnt need the GILif (should_i_call_ba…