- c - 在位数组中找到第一个零
- linux - Unix 显示有关匹配两种模式之一的文件的信息
- 正则表达式替换多个文件
- linux - 隐藏来自 xtrace 的命令
random() * random()
Và random() ** 2
有区别吗? random()
从均匀分布中返回一个介于 0 和 1 之间的值。
在测试两个版本的随机平方数时,我注意到了一点不同。我创建了 100000 个随机平方数,并计算每个 0.01 区间(0.00 到 0.01,0.01 到 0.02,...)中有多少个数字。似乎这些版本的平方随机数生成是不同的。
对一个随机数求平方而不是将两个随机数相乘可以重复使用一个随机数,但我认为分布应该保持不变。真的有区别吗?如果不是,为什么我的测试显示出差异?
我为 random() * random()
生成两个随机分箱分布,为 random() ** 2
生成一个,如下所示:
from random import random
lst = [0 for i in range(100)]
lst2, lst3 = list(lst), list(lst)
#create two random distributions for random() * random()
for i in range(100000):
lst[int(100 * random() * random())] += 1
for i in range(100000):
lst2[int(100 * random() * random())] += 1
for i in range(100000):
lst3[int(100 * random() ** 2)] += 1
给出
>>> lst
[
5626, 4139, 3705, 3348, 3085, 2933, 2725, 2539, 2449, 2413,
2259, 2179, 2116, 2062, 1961, 1827, 1754, 1743, 1719, 1753,
1522, 1543, 1513, 1361, 1372, 1290, 1336, 1274, 1219, 1178,
1139, 1147, 1109, 1163, 1060, 1022, 1007, 952, 984, 957,
906, 900, 843, 883, 802, 801, 710, 752, 705, 729,
654, 668, 628, 633, 615, 600, 566, 551, 532, 541,
511, 493, 465, 503, 450, 394, 405, 405, 404, 332,
369, 369, 332, 316, 272, 284, 315, 257, 224, 230,
221, 175, 209, 188, 162, 156, 159, 114, 131, 124,
96, 94, 80, 73, 54, 45, 43, 23, 18, 3
]
>>> lst2
[
5548, 4218, 3604, 3237, 3082, 2921, 2872, 2570, 2479, 2392,
2296, 2205, 2113, 1990, 1901, 1814, 1801, 1714, 1660, 1591,
1631, 1523, 1491, 1505, 1385, 1329, 1275, 1308, 1324, 1207,
1209, 1208, 1117, 1136, 1015, 1080, 1001, 993, 958, 948,
903, 843, 843, 849, 801, 799, 748, 729, 705, 660,
701, 689, 676, 656, 632, 581, 564, 537, 517, 525,
483, 478, 473, 494, 457, 422, 412, 390, 384, 352,
350, 323, 322, 308, 304, 275, 272, 256, 246, 265,
227, 204, 171, 191, 191, 136, 145, 136, 108, 117,
93, 83, 74, 77, 55, 38, 32, 25, 21, 1
]
>>> lst3
[
10047, 4198, 3214, 2696, 2369, 2117, 2010, 1869, 1752, 1653,
1552, 1416, 1405, 1377, 1328, 1293, 1252, 1245, 1121, 1146,
1047, 1051, 1123, 1100, 951, 948, 967, 933, 939, 925,
940, 893, 929, 874, 824, 843, 868, 800, 844, 822,
746, 733, 808, 734, 740, 682, 713, 681, 675, 686,
689, 730, 707, 677, 645, 661, 645, 651, 649, 672,
679, 593, 585, 622, 611, 636, 543, 571, 594, 593,
629, 624, 593, 567, 584, 585, 610, 549, 553, 574,
547, 583, 582, 553, 536, 512, 498, 562, 536, 523,
553, 485, 503, 502, 518, 554, 485, 482, 470, 516
]
预期的随机误差是前两者之差:
[
78, 79, 101, 111, 3, 12, 147, 31, 30, 21,
37, 26, 3, 72, 60, 13, 47, 29, 59, 162,
109, 20, 22, 144, 13, 39, 61, 34, 105, 29,
70, 61, 8, 27, 45, 58, 6, 41, 26, 9,
3, 57, 0, 34, 1, 2, 38, 23, 0, 69,
47, 21, 48, 23, 17, 19, 2, 14, 15, 16,
28, 15, 8, 9, 7, 28, 7, 15, 20, 20,
19, 46, 10, 8, 32, 9, 43, 1, 22, 35,
6, 29, 38, 3, 29, 20, 14, 22, 23, 7,
3, 11, 6, 4, 1, 7, 11, 2, 3, 2
]
但第一个和第三个之间的差异要大得多,暗示分布不同:
[
4421, 59, 491, 652, 716, 816, 715, 670, 697, 760,
707, 763, 711, 685, 633, 534, 502, 498, 598, 607,
475, 492, 390, 261, 421, 342, 369, 341, 280, 253,
199, 254, 180, 289, 236, 179, 139, 152, 140, 135,
160, 167, 35, 149, 62, 119, 3, 71, 30, 43,
35, 62, 79, 44, 30, 61, 79, 100, 117, 131,
168, 100, 120, 119, 161, 242, 138, 166, 190, 261,
260, 255, 261, 251, 312, 301, 295, 292, 329, 344,
326, 408, 373, 365, 374, 356, 339, 448, 405, 399,
457, 391, 423, 429, 464, 509, 442, 459, 452, 513
]
câu trả lời hay nhất
下面是一些情节:
random() * random()
的所有可能性:
x轴是一个向右递增的随机变量,y轴是另一个向上递增的随机变量。
你可以看到,如果其中一个低,结果就会低,并且都必须高才能得到高结果。
当唯一的决策者是单个轴时,如 random() ** 2
案例,你得到
在这种情况下,它更有可能获得非常暗(大)的值,因为整个顶部都是暗的,而不仅仅是一个角。
当你用random() * random()
使两者都线性化时在顶部:
你看分布确实不一样。
Mã số:
import numpy
import matplotlib
from matplotlib import pyplot
import matplotlib.cm
def make_fig(name, data):
figure = matplotlib.pyplot.figure()
print(data.shape)
figure.set_size_inches(data.shape[1]//100, data.shape[0]//100)
axes = matplotlib.pyplot.Axes(figure, [0, 0, 1, 1])
axes.set_axis_off()
figure.add_axes(axes)
axes.imshow(data, origin="lower", cmap=matplotlib.cm.Greys, aspect="auto")
figure.savefig(name, dpi=200)
xs, ys = numpy.mgrid[:1000, :1000]
two_random = xs * ys
make_fig("two_random.png", two_random)
two_random_flat = two_random.flatten()
two_random_flat.sort()
two_random_flat = two_random_flat[::1000]
make_fig("two_random_1D.png", numpy.tile(two_random_flat, (100, 1)))
one_random = xs * xs
make_fig("one_random.png", one_random)
one_random_flat = one_random.flatten()
one_random_flat.sort()
one_random_flat = one_random_flat[::1000]
make_fig("one_random_1D.png", numpy.tile(one_random_flat, (100, 1)))
您也可以从数学上解决这个问题。获得小于 x
的值的概率, 与 0 ≤ x ≤ 1
Đúng
random()²
:√x
作为随机值低于x
的概率是 random()² < x
的概率.
random() · random()
:给定第一个随机变量是r
Cái thứ hai làR
,我们可以找到 Rr < x
的概率固定 R
:
P(Rr < x)
= P(r < x/R)
= 1 if x > R (and so x/R > 1)
hoặc
= x/R otherwise
所以我们想要
∫ P(Rr < x) dR from R=0 to R=1
= ∫ 1 dR from R=0 to R=x
+ ∫ x/R dR from R=x to R=1
= x(1 - ln R)
正如我们所见,√x ≠ x(1 - ln R)
.
这些分布显示为:
y 轴给出直线(random()²
hoặc random() · random()
)小于 x 轴的概率。
我们看到 random() · random()
, 大数的概率明显较小。
我想最能说明问题的是区分(½x ^ -½
Và - ln x
)并绘制概率密度函数:
这显示了每个 x
的概率相对而言。所以 x
的概率很大 ( > 0.5
) 大约是 random()²
的两倍变体。
关于python - 为什么 random() * random() 与 random() ** 2 不同?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24479310/
Tôi đang làm việc với một tập hợp 173k điểm được dán nhãn là 160 nhóm. Tôi muốn giảm số lượng nhóm/cụm bằng cách hợp nhất những nhóm gần nhất (xuống còn 9 hoặc 10 nhóm). Tôi đã tìm kiếm sklearn hoặc các thư viện tương tự nhưng không thành công. Tôi đoán nó chỉ phân cụm qua knn
Tôi có một danh sách phẳng gồm các số được nhóm hợp lý thành nhóm 3, trong đó mỗi bộ ba là (số, __bỏ qua, cờ [0 hoặc 1]), ví dụ: [7,56,1, 8,0, 0, 2 ,0,0, 6,1,
Tôi đang sử dụng pipenv để quản lý các gói của mình. Tôi muốn viết một tập lệnh python để gọi một tập lệnh python khác bằng môi trường ảo khác (VE). Cách chạy python script 1 bằng VE1 và gọi p khác
Giả sử tôi có tệp script.py nằm ở path = "foo/bar/script.py". Tôi đang tìm cách truyền hàm exec_script() bằng Python từ Python chính của tôi
Điều này nghe có vẻ như một câu đố hay một trò đùa, nhưng thực sự tôi vẫn chưa tìm ra câu trả lời cho câu hỏi này. Vấn đề chính xác là gì? Tôi muốn chạy 2 tập lệnh. Trong tập lệnh đầu tiên, tôi gọi một tập lệnh khác, nhưng tôi muốn chúng tiếp tục song song chứ không phải theo hai luồng riêng biệt. Chủ yếu là vì tôi không muốn
Tôi có một phần mềm với python 2.5.5. Tôi muốn gửi lệnh sẽ khởi động tập lệnh trong python 2.7.5 và sau đó tiếp tục thực thi tập lệnh. Tôi đã thử sử dụng #!python2.7.5 và http://re
Tôi đang sử dụng dòng lệnh python (sử dụng python 2.7) và đang cố chạy tập lệnh Python. Hệ điều hành của tôi là Windows 7. Tôi đã đặt thư mục của mình vào thư mục chứa tất cả các tập lệnh của mình bằng cách sử dụng: os.chdir("
Tiết lộ nội dung: Đã giải quyết được một phần (xem phần cuối). Đây là một ví dụ về mã sử dụng tính năng nhúng Python: #include int main(int argc, char** argv) { Py_SetPythonHome
Giả sử tôi có danh sách sau, tương ứng với giá cổ phiếu tại các thời điểm: giá = [1, 3, 7, 10, 9, 8, 5, 3, 6, 8, 12, 9, 6, 10, 13, 8, 4 , 11] Tôi muốn xác định điều nào sau đây nói chung là phù hợp nhất
Vì vậy, tôi đang cố gắng thay đổi nền của khung này khi một nút radio nhất định được chọn. Khung của tôi thuộc một lớp và chức năng của các nút radio nằm ngoài lớp đó. (Bằng cách này tôi có thể gọi chúng trên tất cả các khung khác.) Vấn đề là bất cứ khi nào tôi chọn nút radio, tôi đều gặp lỗi sau: co
Tôi đang cố gắng so sánh một chuỗi với một biểu thức chính quy trong python như sau, #!/usr/bin/env python3 import re str1 = "Expecting property name
Hãy xem xét mô-đun Boost.Python nguyên mẫu sau đây, mô-đun này nhập lớp "D" từ tệp tiêu đề C++ riêng biệt. /* tập tin: a/b.cpp */ BOOST_PYTHON_MODULE(c)
Làm cách nào để viết chương trình để "xác định số dòng của lệnh gọi hàm?" Mô-đun kiểm tra python cung cấp tùy chọn để xác định số dòng, tuy nhiên, def di(): return Inspection.currentframe().f_back.f_l
Tôi đã cài đặt Python 2.7 bằng macports và do biến $PATH của tôi, đây là những gì tôi nhận được khi nhập $python. Tuy nhiên, virtualenv sử dụng Python 2.6 theo mặc định, ngoại trừ
Tôi chỉ muốn hỏi làm thế nào để tăng tốc độ nghiên cứu trên python. Tôi có một dòng chuỗi dài có độ dài 176861 (tức là các ký tự chữ và số có một số ký hiệu) và tôi đã kiểm tra dòng này bằng hàm này để nghiên cứu: def getExe
list1= [u'%app%%General%%%Council%', u'%people%', u'%people%%Regional%%%Council%%Mandate%', u'%ppp%%Ge
Câu hỏi này đã có câu trả lời ở đây: Pythonic có sử dụng khả năng hiểu danh sách chỉ cho các tác dụng phụ không? (7 câu trả lời) Đã đóng 4 tháng trước. kể
Tôi muốn kết hợp hai danh sách thành một danh sách bằng Python như sau: a = [1,1,1,2,2,2,3,3,3,3] b= ["Sun", "is", "bright ", "Tháng Sáu","và" ,"Ju
Tôi đang chạy Mac OS X 10.8.4 (Darwin 12.4.0) với bản phát hành Boost mới nhất (1.55.0). Tôi đang làm theo hướng dẫn ở đây để xây dựng hướng dẫn Boost-Pyth đi kèm với bản phân phối của tôi
Đang học Python, tôi đang cố gắng tạo một công cụ quét web mà không cần bất kỳ thư viện của bên thứ 3 nào để quy trình này không được sắp xếp hợp lý đối với tôi và tôi biết mình đang làm gì. Tôi đã xem một số tài nguyên trực tuyến nhưng tất cả chúng đều khiến tôi bối rối về điều gì đó. ngoại hình html
Tôi là một lập trình viên xuất sắc, rất giỏi!