我正在玩围棋的一些基本计时,有一个问题。我想在 Golang 计算数组的每个元素的平方根时计算时间,但无论是否保留输出,我都会得到两个不同的答案。这是我的第一个版本:
package main
import ("fmt"
"time"
"math"
"math/rand"
)
// A random array of integers
func randomArray(max int ,len int) []int {
a := make([]int, len)
for i := 0; i <= len-1; i++ {
a[i] = rand.Intn(max)
}
return a
}
// Taking square root of each element in array
func sqrt_array(arr [] int) [] float64 {
var len_arr = len(arr)
a := make([]float64, len_arr)
for i, v := range arr {
a[i] = math.Sqrt(float64(v))
}
return a
}
func main() {
arr := randomArray(100, 10e6)
sqrt := make([]float64, len(arr))
start := time.Now()
sqrt = sqrt_array(arr)
end := time.Now()
fmt.Println("time taken: ", end.Sub(start), sqrt[0])
}
平均耗时约 36 毫秒:
time taken: 36.542019ms 9
现在,当我用空白标识符替换输出“sqrt”时,我得到的速度要慢得多。具体来说,我将 main() 替换为
func main() {
arr := randomArray(100, 10e6)
// sqrt := make([]float64, len(arr))
start := time.Now()
_ = sqrt_array(arr)
end := time.Now()
fmt.Println("time taken: ", end.Sub(start))
}
并得到平均大约 92 毫秒
time taken: 92.121481ms
有人能解释一下发生了什么吗?我觉得如果我理解了,我可能会学到一些关于 Go 的东西。
顺便说一句,我发现在 Python 中相同的计算在广播时大约需要 20 毫秒,如果在循环中则需要几百毫秒。
最佳答案
如果您想要相同的结果,请执行相同的操作!显然,分配不会是免费的!不要注释分配!
例如,
输出:
time taken: 77.726729ms 9
time taken: 78.213242ms 0
main.go:
package main
import (
"fmt"
"math"
"math/rand"
"testing"
"time"
)
// A random array of integers
func randomArray(max int, len int) []int {
a := make([]int, len)
for i := 0; i <= len-1; i++ {
a[i] = rand.Intn(max)
}
return a
}
// Taking square root of each element in array
func sqrt_array(arr []int) []float64 {
var len_arr = len(arr)
a := make([]float64, len_arr)
for i, v := range arr {
a[i] = math.Sqrt(float64(v))
}
return a
}
func main1() {
arr := randomArray(100, 10e6)
sqrt := make([]float64, len(arr))
start := time.Now()
sqrt = sqrt_array(arr)
end := time.Now()
fmt.Println("time taken: ", end.Sub(start), sqrt[0])
}
func main2() {
arr := randomArray(100, 10e6)
// sqrt := make([]float64, len(arr))
sqrt := make([]float64, len(arr))
start := time.Now()
_ = sqrt_array(arr)
end := time.Now()
fmt.Println("time taken: ", end.Sub(start), sqrt[0])
}
func main() {
main1()
main2()
}
关于go - 带和不带空白标识符的 Golang 计时,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55085131/
已经有一个问题回答了如何将“America/Los_Angeles”转换为“PacificTime(US&Canada)”。但是我想将“美国/太平洋”和其他过时的时区转换为RailsTimeZone。我无法在图书馆中找到任何可以帮助我完成此任务的东西。 最佳答案 来自RailsActiveSupport::TimeZonedocs:TheversionofTZInfobundledwithActiveSupportonlyincludesthedefinitionsnecessarytosupportthezonesdefinedb
我使用rails3.1+rspec和factorygirl。我对必填字段(validates_presence_of)的验证工作正常。我如何让测试将该事实用作“成功”而不是“失败”规范是:describe"Addanindustrywithnoname"docontext"Unabletocreatearecordwhenthenameisblank"dosubjectdoind=Factory.create(:industry_name_blank)endit{shouldbe_invalid}endend但是我失败了:Failures:1)Addanindustrywithnona
我正在寻找一个用ruby演示计时器的在线示例,并发现了下面的代码。它按预期工作,但这个简单的程序使用30Mo内存(如Windows任务管理器中所示)和太多CPU有意义吗?非常感谢deftime_blockstart_time=Time.nowThread.new{yield}Time.now-start_timeenddefrepeat_every(seconds)whiletruedotime_spent=time_block{yield}#Tohandle-vesleepinteravalsleep(seconds-time_spent)iftime_spent
遍历nokogiri并使用xpath选择元素相当容易。我需要这个反之亦然,意思是:我需要例如在nokogiri节点上调用.to_xpath以获取元素的完整xpath以将其存储在记录中。有人知道这样做的方法吗? 最佳答案 我能想到的最简单的方法是:Nokogiri::CSS.xpath_fornode.css_path编辑:您也可以尝试使用path方法。 关于ruby-如何从nokogiri对象获取标识符(例如xpath)?,我们在StackOverflow上找到一个类似的问题:
在Railcasts上,我注意到一个非常有趣的功能“转到符号”窗口。它像Command-T一样工作,但显示当前文件中可用的类和方法。如何在vim中获取它? 最佳答案 尝试:helptags有各种程序和脚本可以生成标记文件。此外,标记文件格式非常简单,因此很容易将sed(1)或类似的脚本组合在一起,无论您使用何种语言,它们都可以生成标记文件。轻松获取标记文件(除了下载生成器之外)的关键在于格式化样式而不是实际解析语法。 关于ruby-on-rails-Textmate'Gotosymbol
我想生成一个包含数字、字母和特殊字符的给定(长度可能不同)长度的完全随机的“唯一”(我将确保使用我的模型)标识符例如:161551960578281|2.AQAIPhEcKsDLOVJZ.3600.1310065200.0-514191032|有人可以建议在RubyonRails中最有效的方法吗?编辑:重要:如果可能,请评论您提出的解决方案的效率,因为每次用户进入网站时都会使用它!谢谢 最佳答案 将其用于访问token与UUID不同。您不仅需要伪随机性,而且还需要加密安全PRNG.如果您真的不关心您使用的是什么字符(它们不会增加任何
看来我正在回顾SO帖子中采取的步骤:Capybara,PoltergeistandPhantomjsandgivinganemptyresponseinbody.(如果你愿意,可以将其标记为重复,但我包含了一个最小的独立测试用例和版本号。)问题我做错了什么吗?我可以运行另一个可能有助于隔离问题的最小测试吗?文件:pgtest.rbrequire'rubygems'require'capybara'require'capybara/dsl'require'capybara/poltergeist'modulePGTestincludeCapybara::DSLextendselfdeft
当我将我的Rails+React应用程序部署到Heroku时,我遇到了问题。React客户端位于Rails应用程序的client/目录中。由于使用了react-router,Rails服务器需要知道从React构建中渲染index.html。当我在Heroku上部署客户端时,脚本将内容从client/build/.复制到Rails应用程序的public/目录。现在问题来了:当我的路由检测到类似example.com/about的路径时,它会尝试呈现public/index.html。方法如下:deffallback_index_htmlrenderfile:"public/index.
我想要这样的参数:programdothis--additional--options和:programdothat--with_this_option=value我不知道该怎么做。我唯一能做的就是在开头使用带有--的参数。有什么想法吗? 最佳答案 要使用OptionParser处理位置参数,首先使用OptionParser解析开关,然后从ARGV中获取剩余的位置参数:#optparse-positional-arguments.rbrequire'optparse'options={}OptionParser.newdo|opts
嘿,我有一个看起来像这样的测试test'createaccount'doifUser.create(email:'me@test.com',password:'blahblah')asserttrueelseassertUser.msgendend但是当我尝试运行它时,我收到如下错误消息:1)Error:UserTest#test_create_account:ActiveRecord::RecordNotUnique:PG::UniqueViolation:ERROR:duplicatekeyvalueviolatesuniqueconstraint"index_users_on_e