我们从Python开源项目中,提取了以下40个代码示例,用于说明如何使用numpy.random.multinomial()。
def randomize_scales(self, ordered=True): """ Random C{scales} initialization """ from numpy.random import random, multinomial if ordered: K, N = self.scales.shape Ks = numpy.arange(K) w = random(K) + (5. * K / N) # with pseudocounts c = numpy.repeat(Ks, multinomial(N, w / w.sum())) self.scales = numpy.equal.outer(Ks, c).astype(float) else: s = random(self.scales.shape) self.scales = s / s.sum(0) if 0.0 in self.w: self.randomize_scales(ordered) return self.estimate_means()
def draw_links(self,n=1,log_sampling=False): """ Draw multiple random links. """ urls = [] domain_array = np.array([dmn for dmn in self.domain_links]) domain_count = np.array([len(self.domain_links[domain_array[k]]) for k in range(domain_array.shape[0])]) p = np.array([np.float(c) for c in domain_count]) count_total = p.sum() if log_sampling: # log-sampling [log(x+1)] to bias lower count domains p = np.fromiter((np.log1p(x) for x in p), dtype=p.dtype) if count_total > 0: p = p/p.sum() cnts = npr.multinomial(n, pvals=p) if n > 1: for k in range(cnts.shape[0]): domain = domain_array[k] cnt = min(cnts[k],domain_count[k]) for url in random.sample(self.domain_links[domain],cnt): urls.append(url) else: k = int(np.nonzero(cnts)[0]) domain = domain_array[k] url = random.sample(self.domain_links[domain],1)[0] urls.append(url) return urls
def test_basic(self): random.multinomial(100, [0.2, 0.8])
def test_zero_probability(self): random.multinomial(100, [0.2, 0.8, 0.0, 0.0, 0.0])
def test_size(self): # gh-3173 p = [0.5, 0.5] assert_equal(np.random.multinomial(1, p, np.uint32(1)).shape, (1, 2)) assert_equal(np.random.multinomial(1, p, np.uint32(1)).shape, (1, 2)) assert_equal(np.random.multinomial(1, p, np.uint32(1)).shape, (1, 2)) assert_equal(np.random.multinomial(1, p, [2, 2]).shape, (2, 2, 2)) assert_equal(np.random.multinomial(1, p, (2, 2)).shape, (2, 2, 2)) assert_equal(np.random.multinomial(1, p, np.array((2, 2))).shape, (2, 2, 2)) assert_raises(TypeError, np.random.multinomial, 1, p, np.float(1))
def test_multinomial(self): np.random.seed(self.seed) actual = np.random.multinomial(20, [1/6.]*6, size=(3, 2)) desired = np.array([[[4, 3, 5, 4, 2, 2], [5, 2, 8, 2, 2, 1]], [[3, 4, 3, 6, 0, 4], [2, 1, 4, 3, 6, 4]], [[4, 4, 2, 5, 2, 3], [4, 3, 4, 2, 3, 4]]]) np.testing.assert_array_equal(actual, desired)
def test_multinomial(self): def gen_random(state, out): out[...] = state.multinomial(10, [1/6.]*6, size=10000) self.check_function(gen_random, sz=(10000,6))
def draw_domain(self,log_sampling=False): """ Draw a single, random domain. """ domain = None domain_array = np.array([dmn for dmn in self.domain_links]) domain_count = np.array([len(self.domain_links[domain_array[k]]) for k in range(domain_array.shape[0])]) p = np.array([np.float(c) for c in domain_count]) count_total = p.sum() if log_sampling: # log-sampling [log(x+1)] to bias lower count domains p = np.fromiter((np.log1p(x) for x in p), dtype=p.dtype) if count_total > 0: p = p/p.sum() cnts = npr.multinomial(1, pvals=p) k = int(np.nonzero(cnts)[0]) domain = domain_array[k] return domain
def sample(self, probabilities, temperature=1.0): probabilities = np.asarray(probabilities).astype("float64") probabilities = np.log(probabilities + 1e-8) / temperature e_probabilities = np.exp(probabilities) probabilities = e_probabilities / np.sum(e_probabilities) p = random.multinomial(1, probabilities, 1) return np.argmax(p)
def test_multinomial(self): np.random.seed(self.seed) actual = np.random.multinomial(20, [1/6.]*6, size=(3, 2)) desired = np.array([[[4, 3, 5, 4, 2, 2], [5, 2, 8, 2, 2, 1]], [[3, 4, 3, 6, 0, 4], [2, 1, 4, 3, 6, 4]], [[4, 4, 2, 5, 2, 3], [4, 3, 4, 2, 3, 4]]]) assert_array_equal(actual, desired)
def test_multinomial(self): def gen_random(state, out): out[...] = state.multinomial(10, [1/6.]*6, size=10000) self.check_function(gen_random, sz=(10000, 6)) # See Issue #4263
def getPseudowords(text, strategy, pSeg=0.1): words = [word for utt in text for word in utt] lnCounts = defaultdict(int) for wi in words: lnCounts[len(wi)] += 1 mx = max(lnCounts.keys()) for ii in range(mx): if ii not in lnCounts: lnCounts[ii] = 0 total = sum(lnCounts.values()) lnProbs = [xx[1] / total for xx in sorted(lnCounts.items(), key=lambda xx: xx[0])] pseuds = [] if strategy == "geometric": #create pseudowords by segmenting utterances geometrically for utt in text: pseudUtt = [] boundBefore = 0 uttChars = "".join(utt) for ch in range(len(uttChars)): if random.random() < pSeg or ch == len(uttChars) - 1: pseudUtt.append(uttChars[boundBefore:ch + 1]) boundBefore = ch + 1 pseuds.append(pseudUtt) #print(utt, pseudUtt) elif strategy == "length-matched": for utt in text: pseudUtt = [] boundBefore = 0 if type(utt[0]) == str: uttChars = "".join(utt) else: uttChars = sum(utt, []) while boundBefore < len(uttChars): nextLn = np.argmax(multinomial(1, lnProbs)) nextBound = min(nextLn + boundBefore, len(uttChars)) pseudUtt.append(uttChars[boundBefore:nextBound]) boundBefore = nextBound pseuds.append(pseudUtt) #print(utt, pseudUtt) else: assert(0), "Unknown strategy" return pseuds