假设我有以下结构:
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个字段,因此为每个字段编写方法有点令人生畏和不优雅.
在互联网上看了几个关于 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版本运行速度明显变慢! …
我仍在学习 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)
现在的问题是,虽然一切正常,但我得到了一堆与src和test目标分开构建的目标:
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 …
我正在尝试使用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) 这是我前一个问题的后续问题.
我正在尝试将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.