Swift 为什么这个关闭被称为1201次而不是900次?

Swift 为什么这个关闭被称为1201次而不是900次?,swift,Swift,我有这个激活功能: 协议激活{ 变量输出:[[Double]]{get} func转发(输入:[[Double]]) } 类ReLU:激活{ 公共变量输出:[[Double]] init(){ 输出=[] } 公共函数转发(输入:[[Double]]){ 输出=输入.map{row in row.map{val in max(0,val)} } } 如果我将100x3[[Double]]的方法输入传递给forward,我看到的不是显示其代码行已运行900次(或902次)的标记,而是1201。为

我有这个激活功能:

协议激活{
变量输出:[[Double]]{get}
func转发(输入:[[Double]])
}
类ReLU:激活{
公共变量输出:[[Double]]
init(){
输出=[]
}
公共函数转发(输入:[[Double]]){
输出=输入.map{row in row.map{val in max(0,val)}
}
}

如果我将100x3[[Double]]的
方法输入传递给forward
,我看到的不是显示其代码行已运行900次(或902次)的标记,而是1201。为什么呢?使用普通for循环会更快吗?

您需要稍微分隔代码,以查看实际发生的情况

output = inputs.map { row in     (1 call)
    row.map { val in             (row count call)
        return max(0, val)       (val in row count call)
    }
}
所以在你的一行中,你有1+100+3*100=401个电话

对于300x3的输入,您将得到1201


如果使用for循环,您将得到相同的结果。

您需要稍微分隔代码,以查看实际发生的情况

output = inputs.map { row in     (1 call)
    row.map { val in             (row count call)
        return max(0, val)       (val in row count call)
    }
}
所以在你的一行中,你有1+100+3*100=401个电话

对于300x3的输入,您将得到1201


如果使用for循环,您将得到相同的结果。

在调用forward func的地方添加代码ddid您的意思是100×3=900?我猜你的意思是300×3。正如Kerstin所指出的,将这一行代码分解成单独的行,您将更好地了解发生了什么。对其进行基准测试,您将看到发布版本中的非实质性性能b/w
map
for
方法。在极端情况下,您可能会考虑VDSP(见)。例如,通过每行数百万条记录,我使用vDSP实现了30%的性能改进。但在这些极端情况之外的任何情况下,差异都是无关紧要的,我们应该避免过早优化。在该大小的数据集上,差异为0.03秒。下面给出的答案让我很惊讶,但没什么太让我担心的了。代码中调用forward func的地方。你的意思是100×3=900?我猜你的意思是300×3。正如Kerstin所指出的,将这一行代码分解成单独的行,您将更好地了解发生了什么。对其进行基准测试,您将看到发布版本中的非实质性性能b/w
map
for
方法。在极端情况下,您可能会考虑VDSP(见)。例如,通过每行数百万条记录,我使用vDSP实现了30%的性能改进。但在这些极端情况之外的任何情况下,差异都是无关紧要的,我们应该避免过早优化。在该大小的数据集上,差异为0.03秒。这是令人惊讶的给出了下面的答案,但没有什么让我太担心