<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0">
  <channel>
    <link>http://www.mathworks.com/matlabcentral/newsreader/view_thread/153495</link>
    <title>MATLAB Central Newsreader - How to generate a random data?</title>
    <description>Feed for thread: How to generate a random data?</description>
    <language>en-us</language>
    <copyright>&amp;copy;1994-2012 by MathWorks, Inc.</copyright>
    <webmaster>webmaster@mathworks.com</webmaster>
    <generator>MATLAB Central Newsreader</generator>
    <docs>http://blogs.law.harvard.edu/tech/rss</docs>
    <ttl>60</ttl>
    <image>
      <title>MathWorks</title>
      <url>http://www.mathworks.com/images/membrane_icon.gif</url>
    </image>
    <item>
      <pubDate>Fri, 27 Jul 2007 00:26:54 -0400</pubDate>
      <title>How to generate a random data?</title>
      <link>http://www.mathworks.com/matlabcentral/newsreader/view_thread/153495#385157</link>
      <author>Rui Yang</author>
      <description>I want to generate a random sequence. For example(1,2,3,4).The probability distributing of each element is (20%, 20%, 20%, 40%). How to realize it in Matlab?</description>
    </item>
    <item>
      <pubDate>Fri, 27 Jul 2007 05:08:01 -0400</pubDate>
      <title>Re: How to generate a random data?</title>
      <link>http://www.mathworks.com/matlabcentral/newsreader/view_thread/153495#385161</link>
      <author>Yang Zhang</author>
      <description>&quot;Rui Yang&quot; &amp;lt;rui.yang@mathworks.com&amp;gt; wrote in message &amp;lt;ef5ede4.-1@webcrossing.raydaftYaTP&amp;gt;...&lt;br&gt;
&amp;gt; I want to generate a random sequence. For example(1,2,3,4).The probability distributing of each element is (20%, 20%, 20%, 40%). How to realize it in Matlab?&lt;br&gt;
&lt;br&gt;
&lt;br&gt;
&lt;br&gt;
===============&lt;br&gt;
Hi,&lt;br&gt;
&lt;br&gt;
A simple but not wise way is:&lt;br&gt;
&lt;br&gt;
x = rand(1,1000);&lt;br&gt;
y = 4*ones(1,1000);&lt;br&gt;
y(find(x&amp;lt;-0.6)) = 1;&lt;br&gt;
y(find(x&amp;gt;-0.6 || x &amp;lt; -0.2)) = 2;&lt;br&gt;
y(find(x&amp;gt;-0.2 || x &amp;lt; 0.2)) = 3;&lt;br&gt;
&lt;br&gt;
HTH&lt;br&gt;
&lt;br&gt;
Yang</description>
    </item>
    <item>
      <pubDate>Fri, 27 Jul 2007 05:24:09 -0400</pubDate>
      <title>Re: How to generate a random data?</title>
      <link>http://www.mathworks.com/matlabcentral/newsreader/view_thread/153495#385163</link>
      <author>Rui Yang</author>
      <description>&quot;Yang Zhang&quot; &amp;lt;zhyang99@hotmail.com&amp;gt; wrote in message &amp;lt;f8bujg$6n6$1@fred.mathworks.com&amp;gt;...&lt;br&gt;
&amp;gt; &quot;Rui Yang&quot; &amp;lt;rui.yang@mathworks.com&amp;gt; wrote in message &amp;lt;ef5ede4.-1@webcrossing.raydaftYaTP&amp;gt;...&lt;br&gt;
&amp;gt; &amp;gt; I want to generate a random sequence. For example(1,2,3,4).The probability distributing of each element is (20%, 20%, 20%, 40%). How to realize it in Matlab?&lt;br&gt;
&amp;gt; &lt;br&gt;
&amp;gt; &lt;br&gt;
&amp;gt; &lt;br&gt;
&amp;gt; ===============&lt;br&gt;
&amp;gt; Hi,&lt;br&gt;
&amp;gt; &lt;br&gt;
&amp;gt; A simple but not wise way is:&lt;br&gt;
&amp;gt; &lt;br&gt;
&amp;gt; x = rand(1,1000);&lt;br&gt;
&amp;gt; y = 4*ones(1,1000);&lt;br&gt;
&amp;gt; y(find(x&amp;lt;-0.6)) = 1;&lt;br&gt;
&amp;gt; y(find(x&amp;gt;-0.6 || x &amp;lt; -0.2)) = 2;&lt;br&gt;
&amp;gt; y(find(x&amp;gt;-0.2 || x &amp;lt; 0.2)) = 3;&lt;br&gt;
&amp;gt; &lt;br&gt;
&amp;gt; HTH&lt;br&gt;
&amp;gt; &lt;br&gt;
&amp;gt; Yang&lt;br&gt;
&lt;br&gt;
Thanks, It is a good way to get it.</description>
    </item>
    <item>
      <pubDate>Fri, 27 Jul 2007 06:58:52 -0400</pubDate>
      <title>Re: How to generate a random data?</title>
      <link>http://www.mathworks.com/matlabcentral/newsreader/view_thread/153495#385169</link>
      <author>Markus Buehren</author>
      <description>It think this function is faster:&lt;br&gt;
&lt;br&gt;
function states = randomstate(probs, M, N)&lt;br&gt;
%RANDOMSTATE  Randomly choose a state from given discrete probabilites.&lt;br&gt;
%		X = RANDOMSTATE(PROBS) gives a random state from the discrete&lt;br&gt;
%		probability distribuation given in vector PROBS.&lt;br&gt;
%&lt;br&gt;
%		X = RANDOMSTATE(PROBS, M, N) returns an N-by-M-matrix of random states.&lt;br&gt;
%&lt;br&gt;
%		For example, RANDOMSTATE([0.1 0.5 0.4]) is 1 with a probability of&lt;br&gt;
%		0.1, 2 with a probability of 0.5 and 3 with a probability of 0.4&lt;br&gt;
%&lt;br&gt;
%		Note: The probability vector may contain weight values that are not&lt;br&gt;
%		normalized to one.&lt;br&gt;
%&lt;br&gt;
%		Markus Buehren		&lt;br&gt;
&lt;br&gt;
nOfStates = length(probs);&lt;br&gt;
% sumProbs = sum(probs);&lt;br&gt;
&lt;br&gt;
if nargin == 1&lt;br&gt;
	M = 1;&lt;br&gt;
	N = 1;&lt;br&gt;
elseif nargin == 2&lt;br&gt;
	N = M;&lt;br&gt;
end&lt;br&gt;
&lt;br&gt;
% Find states&lt;br&gt;
if M == 1 &amp;&amp; N == 1&lt;br&gt;
	&lt;br&gt;
	sumProbs = sum(probs);&lt;br&gt;
	number = rand(1) * sumProbs;&lt;br&gt;
	threshold = 0;&lt;br&gt;
	for k = 1:nOfStates&lt;br&gt;
		threshold = threshold + probs(k);&lt;br&gt;
		if number &amp;lt;= threshold&lt;br&gt;
			states = k;&lt;br&gt;
			return&lt;br&gt;
		end&lt;br&gt;
	end&lt;br&gt;
	states = nOfStates;	&lt;br&gt;
	&lt;br&gt;
	% this version is slower:&lt;br&gt;
	%index = cumsum(probs);&lt;br&gt;
	%states = find(rand(1) * index(end) &amp;lt; index, 1);&lt;br&gt;
	&lt;br&gt;
else&lt;br&gt;
	&lt;br&gt;
	sumProbs = sum(probs);&lt;br&gt;
	numbers = rand(M,N) * sumProbs;&lt;br&gt;
	states = ones(M,N);&lt;br&gt;
	threshold = 0;&lt;br&gt;
	for k = 1:nOfStates-1&lt;br&gt;
		threshold = threshold + probs(k);&lt;br&gt;
		states(numbers &amp;gt;= threshold) = k+1;&lt;br&gt;
	end&lt;br&gt;
&lt;br&gt;
end</description>
    </item>
  </channel>
</rss>

