小编Adr*_*ian的帖子

从结构的向量中,获取一个向量,该向量收集每个结构的一个字段

假设我有以下结构:

struct Point {
    double X,Y,Z;
};
Run Code Online (Sandbox Code Playgroud)

和以下向量:

std::vector<Point> v;
// populate v with random points
Run Code Online (Sandbox Code Playgroud)

现在,我想调用类似的东西collect(v, X)并获取std::vector包含X原始结构向量中的值的内容,例如:

v.push_back(Point{1.0, 2.0,  3.0});
v.push_back(Point{1.1, 0.0, -0.5});
auto ans = collect(v,X);
// ans = [1.0, 1.1]
Run Code Online (Sandbox Code Playgroud)

我认为这是一个非常常见的任务,我确信这个名字很好,我在问的时候无法想出(随意指出我!).

我可以做这个:

std::vector<double> collectX(std::vector<Point> v) {
    std::vector<double> output;
    for (auto elem : v) {
        output.push_back(elem.X);
    }
}
/* Repeat for each field the struct Point has... */
Run Code Online (Sandbox Code Playgroud)

我知道C++没有反思.我想知道是否有解决方法?正如您可能想象的那样,我正在使用的结构不只有3个字段,因此为每个字段编写方法有点令人生畏和不优雅.

c++

5
推荐指数
2
解决办法
182
查看次数

Julia 并行性:@distributed (+) 比串行慢?

在互联网上看了几个关于 Julia 并行性的教程后,我决定实现一个小的并行片段来计算谐波级数。

序列号为:

harmonic = function (n::Int64)
    x = 0
    for i in n:-1:1 # summing backwards to avoid rounding errors
        x +=1/i
    end
    x
end
Run Code Online (Sandbox Code Playgroud)

我制作了 2 个并行版本,一个使用@distributed宏,另一个使用@everywhere宏(julia -p 2顺便说一句):

@everywhere harmonic_ever = function (n::Int64)
    x = 0
    for i in n:-1:1
        x +=1/i
    end
    x
end

harmonic_distr = function (n::Int64)
    x = @distributed (+) for i in n:-1:1
        x = 1/i
    end
    x
end
Run Code Online (Sandbox Code Playgroud)

但是,当我运行上面的代码和@time它时,我没有得到任何加速 - 事实上,该@distributed版本运行速度明显变慢! …

parallel-processing julia

3
推荐指数
1
解决办法
727
查看次数

CMake 创建了很多我没有指定的目标

我仍在学习 CMake,并在一个带有库和测试的小项目中使用它(使用 Catch2)。我的设置是 Windows 10、带有 MinGW 的 GCC 6.3.0、带有 CMakeTools 插件的 CMake 3.13.3 和 VSCode。项目结构:

.
+- build
+- doc
+- src
|  +- CMakeLists.txt
|  +- /* .hpp and .cpp sources */
+- test
|  +- CMakeLists.txt
|  +- unit_tests.cpp
+- CMakeLists.txt
Run Code Online (Sandbox Code Playgroud)

现在的问题是,虽然一切正常,但我得到了一堆与srctest目标分开构建的目标:

ContinuousBuild.dir/
ContinuousTest.dir/
ExperimentalMemCheck.dir/
NightlyMemoryCheck.dir/
ContinuousConfigure.dir/
ContinuousUpdate.dir/
ExperimentalStart.dir/
Nightly.dir/
NightlyStart.dir/
ContinuousCoverage.dir/
Experimental.dir/
ExperimentalSubmit.dir/
NightlyBuild.dir/
NightlySubmit.dir/
ContinuousMemCheck.dir/
ExperimentalBuild.dir/
ExperimentalTest.dir/
NightlyConfigure.dir/
NightlyTest.dir/
ContinuousStart.dir/
ExperimentalConfigure.dir/
ExperimentalUpdate.dir/
NightlyCoverage.dir/
NightlyUpdate.dir/
Continuous.dir/
ContinuousSubmit.dir/
ExperimentalCoverage.dir/
NightlyMemCheck.dir/
Run Code Online (Sandbox Code Playgroud)

他们位于build/CMakeFiles/。我不知道如何摆脱它们?这是我的 3 …

cmake

3
推荐指数
1
解决办法
1733
查看次数

KerasClassifier 无法拟合模型,尽管一切正常

我正在尝试使用KerasClassifier包装器以使我的工作流程对 scikit 友好。但是,当我尝试将它与以下函数一起使用时,会出现错误;使用原生 Keras 模型训练模型fit()是可行的。(这是Tensorflow 2.2.0,在conda环境中运行)

def model_arch(n_features: int):
    i = tf.keras.layers.Input(shape=(n_features,))

    hidden_dense = tf.keras.layers.Dense(64)(i)
    hidden_dense = tf.keras.layers.BatchNormalization()(hidden_dense)
    hidden_dense = tf.keras.layers.Activation(tf.nn.tanh)(hidden_dense)

    o = tf.keras.layers.Dense(1)(hidden_dense)
    o = tf.keras.layers.BatchNormalization()(o)
    o = tf.keras.layers.Activation("sigmoid")(o)

    classifier = tf.keras.models.Model(inputs=i, outputs=o)

    opt = tf.keras.optimizers.SGD(lr=1e-3, decay=1e-6, momentum=0.9, nesterov=True)
    classifier.compile(
        loss="binary_crossentropy",
        optimizer=opt,
        metrics=["accuracy"],
    )
    
    return classifier
Run Code Online (Sandbox Code Playgroud)

以下作品:

X = np.random.random((100,3))
y = np.random.random((100,)) # 'y' is a binary vector in reality

clf = model_arch(3)
clf.fit(X, y, epochs=10)
Run Code Online (Sandbox Code Playgroud)

但是,当我尝试使用KerasClassifier包装器时,出现错误:

clf = KerasClassifier(model_arch(3), epochs=10)
clf.fit(X, …
Run Code Online (Sandbox Code Playgroud)

python machine-learning scikit-learn keras tensorflow

2
推荐指数
1
解决办法
3640
查看次数

计算非常大N的谐波系列(任意精度问题)

这是我前一个问题的后续问题.

我正在尝试将Harmonic系列计算为非常大的项,但是当与log(n)+γ进行比较时,我没有得到预期的误差.

我怀疑主要问题是BigFloatjulia类型.

harmonic_bf = function(n::Int64)
    x=BigFloat(0)
    for i in n:-1:1
        x += BigFloat(1/i)
    end
    x
end
Run Code Online (Sandbox Code Playgroud)

例如,众所周知,公式的下限:H_n-log(n)-γ是1/2 /(n + 1).然而,这适用于n = 10 ^ 7然后在n = 10 ^ 8时失败.

n=10^8
? = big"0.57721566490153286060651209008240243104215933593992"
lower_bound(n) = 1/2/(n+1)

>>> harmonic_bf(n)-log(n)-? > lower_bound(BigFloat(n))
false
Run Code Online (Sandbox Code Playgroud)

它让我疯狂,我似乎无法理解缺少的东西...... BigFloat应该让算术精度问题解决,但似乎并非如此.

注意:我尝试使用未设置的精度和256位精度的BigFloat.

precision arbitrary-precision julia

1
推荐指数
1
解决办法
46
查看次数