我正在尝试使用以下代码计算双精度向量的平均值(编译g++ mean.cc -std=c++0x
):
// mean.cc
#include <algorithm>
#include <iostream>
#include <vector>
struct Mean {
unsigned int n;
Mean(unsigned int n) : n(n) {}
double operator()(double sum, double x) {
return sum + x/n;
}
};
int main () {
std::vector<double> v = {1,2,3,4,5,6};
Mean mean(v.size());
std::cout << "mean: " << std::accumulate(v.begin(), v.end(), 0, mean) << "\n";
return 0;
}
Run Code Online (Sandbox Code Playgroud)
3.5
我认为平均值应该是.然而该程序打印mean: 1
.
如果我删除除法n
,我operator()
的元素总和按预期计算.我在这做错了什么?
我写了一个简单的脚本,旨在对一个简单的测试数据集进行层次聚类.
我发现函数fclusterdata是将我的数据聚类成两个集群的候选者.它需要两个强制调用参数:数据集和阈值.问题是,我找不到可以产生预期的两个集群的阈值.
如果有人能告诉我我做错了什么,我会很高兴的.如果有人能指出更适合我的聚类的其他方法,我也会很高兴(我明确地希望避免事先指定聚类的数量.)
这是我的代码:
import time
import scipy.cluster.hierarchy as hcluster
import numpy.random as random
import numpy
import pylab
pylab.ion()
data = random.randn(2,200)
data[:100,:100] += 10
for i in range(5,15):
thresh = i/10.
clusters = hcluster.fclusterdata(numpy.transpose(data), thresh)
pylab.scatter(*data[:,:], c=clusters)
pylab.axis("equal")
title = "threshold: %f, number of clusters: %d" % (thresh, len(set(clusters)))
print title
pylab.title(title)
pylab.draw()
time.sleep(0.5)
pylab.clf()
Run Code Online (Sandbox Code Playgroud)
这是输出:
threshold: 0.500000, number of clusters: 129
threshold: 0.600000, number of clusters: 129
threshold: 0.700000, number of clusters: 129
threshold: 0.800000, number …
Run Code Online (Sandbox Code Playgroud) 我正在读取id3标签,其中每个帧的大小以3个字节指定.我怎样才能将此值用作int?
在git存储库中,我有一个子目录,我想要重置为过去的特定状态(早期提交).是否可以撤消特定子目录中文件的所有提交?我认为没有提交将更改应用于此子目录中的文件以及同时位于其他位置的文件.但是,如果可以在不受影响的文件上保留不在此目录中的提交,那将会很好吗?
我不需要删除历史记录.检查旧状态,删除子目录的当前内容,并在其位置复制并提交旧状态将没有问题.但最终可能会有更优雅(gitonic)的方式.
我遇到了Google提出的一个我无法解决的面试问题:
N
在距离D
城镇一公里的绿洲上有一堆千克谷物.谷物需要通过骆驼车运输,其初始位置在绿洲.推车一次可以携带C
千克谷物.骆驼在运输时使用谷物作为燃料.它消耗F
kg/km.写一个函数来计算
X
可以运送到城镇的最大谷物量(kg).
我试图使用递归但是如果不混淆自己,我就无法进一步发展.
这是我到目前为止所拥有的:
number of transports = N / C
fuel amount for distance D = D * F
X = N - ((number of transports) * 2 * (fuel amount for distance D))
Run Code Online (Sandbox Code Playgroud) 我有一些在Matlab中工作的计算机视觉系统.当它检测到我要告诉Python它发现它的东西时.只是是或否没有任何其他信息,但系统工作在无限循环中,所以我希望Python不断地以某种方式跟踪Matlab.
我想知道最简单的方法是什么.
例如,Matlab可以在桌面上创建一个Python将会看到并根据功能触发的文件.
我正在实现基于文件锁的互斥机制。我的脚本的其他实例知道,当它们遇到被锁定的特定文件时,它们不应该运行。
为了实现这一点,我使用fcntl.flock
. 当我释放锁时,我还想清理文件,当没有进程实际运行时,它不会坐在那里指示旧的 pid。
我的问题是,我应该何时以及如何清理文件,尤其是在什么时候可以删除它。基本上我看到两个选项:
根据我的理解,每一个都将我的应用程序暴露在略有不同的竞争条件下。什么是最佳实践,我错过了什么?
这是一个(过于简化的)示例:
import fcntl
import os
import sys
import time
# open file for read/write, create if necessary
with open('my_lock_file.pid', 'a+') as f:
# acquire lock, raises exception if lock is hold by another process
try:
fcntl.flock(f, fcntl.LOCK_EX | fcntl.LOCK_NB)
except IOError:
print 'other process running:', f.readline()
sys.exit()
try:
# do something
f.write('%d\n' % os.getpid())
f.flush()
# more stuff here ...
time.sleep(5)
finally:
# clean up here?
# release lock
fcntl.flock(f, …
Run Code Online (Sandbox Code Playgroud) 我正在尝试使用原始套接字构建以太网网络。我不能使用 TCP/IP、UDP 或任何其他协议。
这是因为它将与非常简单的硬件进行通信,这些硬件没有资源来处理所有不同的协议层。我的网络将由一台主机组成,通过以太网交换机与多个硬件进行通信。在这一点上,我基本上只想向每个硬件发送简单的数据包,并建立一个我可以扩展的简单服务器。我的系统运行的是 Linux,服务器需要用 C 或 C++ 编写。
我一直在寻找有关如何使用原始套接字的信息,但每个人都总是说不要使用它们并且没有提供任何信息。我有很强的编程背景,但没有网络经验。任何人都可以提供有关如何入门或在哪里可以找到相关教程的任何信息吗?
我遇到了一个非常简单的代码问题.我想接受1到3之间的整数,并进行错误检查.它适用于检查太大或太小的数字,但是当输入字母/数字组合时,它会陷入无限循环.建议?
#include <iostream>
using namespace std;
int main(int argc, char *argv[]){
int input;
cout << "\nPlease enter a number from 1 to 3:" << endl;
cout << "-> ";
cin >> input;
while(input< 1 || input> 3){
cout << "\n---------------------------------------" << endl;
cout << "\n[!] The number you entered was invalid." << endl;
cout << "\nPlease re-enter a number from 1 to 3" << endl;
cout << "-> ";
cin >> input;
}
cout << "You chose " << input …
Run Code Online (Sandbox Code Playgroud) 我需要标准库中的一个函数,用一个字符替换字符串中所有出现的字符.
我还需要标准库中的一个函数,它用字符串替换字符串中所有出现的子字符串.
标准库中是否有这样的功能?