- c - 在位数组中找到第一个零
- linux - Unix 显示有关匹配两种模式之一的文件的信息
- 正则表达式替换多个文件
- linux - 隐藏来自 xtrace 的命令
我只是观察到,当使用 Python3 时,使用 random.shuffle
对列表进行洗牌需要大约一半的运行时间,而当为 显式提交函数
关键字参数。我检查了Python2是否有同样的问题,发现它只出现在Python3。random.random
>random
我使用下面的代码来测量两个版本的运行时间:
from timeit import Timer
t1 = Timer("random.shuffle(l)", "import random; l = list(range(100000))")
t2 = Timer("random.shuffle(l, random = random.random)", "import random; l = list(range(100000))")
print("With default rand: %s" % t1.repeat(10,1))
print("With custom rand: %s" % t2.repeat(10,1))
我做了一个testcase at ideone供您使用 Python3 和 Python2 查看相同的代码.
theodocumentation for shuffle当我省略可选的关键字参数 ngẫu nhiên
时,在默认情况下使用相同的函数 random.random
,所以当我给它相同的函数来生成时应该没有区别默认情况下的随机数。
我检查了 Lib/random.py
文件夹中的 shuffle
函数的相应来源(Python2 与 Python3),发现它们的行为方式相同 nếu như 我明确调用带有 ngẫu nhiên
关键字函数的 Python3 版本。如果我省略这个参数,Python3 将使用辅助函数 _randbelow
所以应该是我的问题的根源。我不明白为什么 Python3 使用 _randbelow
因为它减慢了 shuffle
的速度。据我所知,它的好处在于生成任意大的随机数,但它不应该减慢我对少于 2^32 个元素(在我的例子中是 100000 个)的列表的改组。
任何人都可以向我解释为什么我在运行时看到如此不同,尽管当我使用 Python3 时它们应该更接近吗?
P.S.:请注意,我不感兴趣为什么使用 Python2 的运行时比使用 Python3 更好,但是在 Python3 中使用参数 rand=rand.rand
参数与不使用参数时的运行时差异仅适用于 Python3。
câu trả lời hay nhất
random.shuffle
函数中的文档字符串与代码相矛盾。在 python 2.7.2+ 中,文档字符串是正确的:
def shuffle(self, x, random=None, int=int):
"""x, random=random.random -> shuffle list x in place; return None.
Optional arg random is a 0-argument function returning a random
float in [0.0, 1.0); by default, the standard random.random.
"""
if random is None:
random = self.random
for i in reversed(xrange(1, len(x))):
# pick an element in x[:i+1] with which to exchange x[i]
j = int(random() * (i+1))
x[i], x[j] = x[j], x[i]
但是在 Python 3.2 中我们发现:
def shuffle(self, x, random=None, int=int):
"""x, random=random.random -> shuffle list x in place; return None.
Optional arg random is a 0-argument function returning a random
float in [0.0, 1.0); by default, the standard random.random.
"""
randbelow = self._randbelow
for i in reversed(range(1, len(x))):
# pick an element in x[:i+1] with which to exchange x[i]
j = randbelow(i+1) if random is None else int(random() * (i+1))
x[i], x[j] = x[j], x[i]
所以docstring还是老样子,不过现在使用的默认函数是random.randbelow
关于python - 在 Python3 中使用 `random.shuffle` 作为关键字参数时 `random.random` 的运行时间更短,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15117573/
Tóm lại: Tôi muốn trích xuất các tùy chọn khác nhau từ các tham số mẫu biến đổi, nhưng không chỉ theo nhãn mà còn theo chỉ mục của các tham số đó, là các nhãn không xác định. Tôi thích các phương thức tăng cường (chẳng hạn như chiến lược heap hoặc lockfree), nhưng muốn làm cho nó tương thích với S
Tôi có thể cung cấp một số trợ giúp về câu lệnh IF excel trong ô không? Nó đang làm gì vậy? Đánh giá nào đã được thực hiện trên "BaselineAmount"? =IF(Số tiền cơ sở, (Phương sai/Baselin
Tôi đang sử dụng phương pháp sau: public async Task Save(Foo foo,out int param) { ....... MySqlParameter prmparamID
Tôi đang sử dụng CodeGear RAD Studio IDE. Để kiểm tra ứng dụng của tôi với các tham số dòng lệnh, tôi đã sử dụng trường Tham số trong menu Chạy->Tham số nhiều lần. Nhưng mỗi lần tôi cho nó một giá trị mới, nó lại không thể kéo xuống từ mức
Tôi đã viết một số mã cho loại thẻ tín dụng, dán bên dưới. Tôi có một hàm tạo chấp nhận các biến trên và đang xem xét một số cách để định dạng các biến này thành chuỗi để đầu ra cuối cùng sẽ giống như Số: 1234 5678 9012 3456 Hạn chót:
Tham số MySql IN - Giá trị tham số VarChar IN có yêu cầu dấu ngoặc đơn khi được sử dụng trong quy trình được lưu trữ không? Tôi đã tạo mã ASP cổ điển như thường lệ nhưng tôi không cập nhật cột. Tôi có cần trích dẫn các thông số VarChar không?
Bắt đầu như bên dưới nhưng dường như không thể tìm ra cách hoàn thành nó. Về cơ bản, nếu tôi gọi myTest([one, Two, Three], 2); thì nó sẽ trả về phần tử thứ ba. Phải sử dụng vòng lặp for để tìm giải pháp của tôi. chức năng
Khi truyền 1113355579999 làm tham số, giá trị sẽ trở thành 959050335 bên trong hàm. Gọi (main.c): printf("%d\n", FindCommonDigit(111335557999
Câu hỏi này đã có câu trả lời ở đây: Java là "pass-by-reference" hay "pass-by-value" (92 câu trả lời) Đã đóng 9 năm trước. lớp công khai StackOve
Tôi thực sự bối rối, khi một cái gì đó như 1 == scanf("%lg", &entry) được đổi chỗ cho scanf("%lg", &entry) == 1 thì không có gì khác biệt. Cuốn sách thí nghiệm của tôi nói vế trước, nhưng tôi nghĩ vế sau có thể hiểu được. 1 =
Tôi đang cố gắng sử dụng Delphi 7 bằng cách sử dụng hàm gọi SetupDiGetDeviceRegistryProperty. Cuộc gọi đến từ hàm ví dụ SetupEnumAvailableComPorts. Nó trông như thế này:
Tôi cần triển khai hiển thị một số sự kiện trên dự án hiện có. Tôi không thể thay đổi cấu trúc cơ sở dữ liệu. Trong Bộ điều khiển của tôi, tôi đang chuyển dấu thời gian (từ yêu cầu ajax) và tôi cần hiển thị 8 sự kiện trước đó. Vì vậy, nếu dấu thời gian là (sau khi chuyển đổi)
Mới đối với đường ray. Theo hướng dẫn về liên kết đa hình, tôi đã tìm thấy điều này để đặt @client trong việc tạo và hủy. @client = Client.find(params[:client_id] || p
Tôi có thể chạy chương trình Java -Xms256M thông qua Eclipse bằng cách đặt tham số VM thành -Xmx1024m. Bây giờ tôi muốn chạy cùng một chương trình Java (jar) thông qua tệp .bat trong Windows
Tôi có một DLL Delphi hoạt động khi được ứng dụng Delphi gọi và xuất một phương thức được khai báo là: Thủ tục ProduceOutput(request,inputs:widestring; va
Sau khi xem qua tài liệu và ví dụ, tôi vẫn chưa tìm ra chính xác các tham số trong tệp lược đồ.yaml được sử dụng ở đâu. Sử dụng mẫu mã AWS tại đây: https://github.com/aws-samples/aws-proton
Hướng dẫn sử dụng: thủ tục get_user_profile ( i_attuid trong ras_user.attuid%type, i_data_group trong data_g
Tôi có một chuỗi được truyền dưới dạng tham số cho quy trình được lưu trữ của mình. dim AgentString as String = " 'test1', 'test2', 'test3' " Tôi muốn sử dụng khai báo tham số này trong IN. VÀ
Câu hỏi này đã có câu trả lời: Khi nào tôi nên sử dụng "this" trong lớp học? (17 câu trả lời) Đã đóng 6 năm trước. Tôi đã chạy một số mã java và tôi thấy có điều gì đó mà tôi không hiểu lắm. Tại sao?
Tôi gõ cuộn (0,10,200,10); nhưng khi chạy nó chuyển chuỗi "xxpos" hoặc "yypos", tôi đã thử mà không có dấu nháy đơn nhưng nó không hoạt động. cuộn = hàm (xp
Tôi là một lập trình viên xuất sắc, rất giỏi!