我有一个列表中的范围,如:
ranges = [(1, 50), (49, 70), (75, 85), (84, 88), (87, 92)]
Run Code Online (Sandbox Code Playgroud)
我想找到可以从这些构建的最长范围(当它们相互重叠时)。
预期输出:
[(1, 70), (75, 92)]
Run Code Online (Sandbox Code Playgroud)
我有一个解决方案,但是它太复杂了,我相信一定有一个更简单的解决方案来解决这个问题
我的解决方案:
def overlap(x, y):
return range(max(x[0], y[0]), min(x[-1], y[-1]) + 1)
ranges = [(1, 50), (49, 70), (75, 85), (84, 88), (87, 92)]
beg, end = min([x[0] for x in ranges]), 0
for i in ranges:
if i[0] == beg:
end = i[1]
while beg:
for _ in ranges:
for i in ranges:
if i[1] > end and …Run Code Online (Sandbox Code Playgroud) 我正在使用scikit-learn python模块创建一个决策树,它的工作就像一个魅力.我想再做一件事.使树仅在属性上拆分一次.
这背后的原因是因为我非常奇怪的数据集.我使用嘈杂的数据集,我对噪音也很感兴趣.我的课程结果是二进制的,比如[+, - ].我有一堆属性,数字大多在(0,1)范围内.
当scikit-learn创建树时,它会多次分割属性,以使树"更好".我知道通过这种方式叶子节点变得更纯净,但事实并非如此.
我所做的是通过计算不同截止值中的信息增益并选择最大值来定义每个属性的截止值.通过这种方式,使用"leave-one-out"和"1/3-2/3"交叉验证技术,我获得了比原始树更好的结果.
问题是,当我尝试自动化这个时,我遇到了一个围绕下限和上限的问题,例如大约0和1,因为大多数元素将在/上面,并且我得到非常高的信息增益,导致其中一个集合是纯粹的,即使它只包含1-2%的完整数据.
总而言之,我想做一些事情来制作scikit - 学习只拆分属性一次.
如果无法做到,你们有什么建议如何以一种很好的方式产生这些截止点?
非常感谢!
我有 2 个子图:
plt.subplot(1, 2, 1)
plt.plot(x, y)
plt.subplot(1, 2, 2)
plt.plot(u, v)
Run Code Online (Sandbox Code Playgroud)
的范围u和v是[0,1]两者,和的范围x和y是随机的,并且x是从不同的y。我想让两个子图都平方,所以 x 轴的长度应该等于 y 轴的长度。对于第二个子图,使用另一个 SO 问题很容易:
plt.subplot(1, 2, 1)
plt.plot(x, y)
plt.subplot(1, 2, 2)
plt.plot(u, v)
plt.axis('scaled')
Run Code Online (Sandbox Code Playgroud)
然而,这种方法不适用于第一个子图,它将 y 轴按比例缩小到很小的范围,因为值在一个小范围内,而 x 轴基本上在 [0,1] 范围内,因此它具有相同的缩放比例第二个子情节。
如何将第一个子图的 y 轴缩放为等于其他轴长度?
昨天我问了一个问题:与多进程并行读取数据
我得到了非常好的答案,我实施了答案中提到的解决方案,我标记为正确.
def read_energies(motif):
os.chdir("blabla/working_directory")
complx_ener = pd.DataFrame()
# complex function to fill that dataframe
lig_ener = pd.DataFrame()
# complex function to fill that dataframe
return motif, complx_ener, lig_ener
COMPLEX_ENERGIS = {}
LIGAND_ENERGIES = {}
p = multiprocessing.Pool(processes=CPU)
for x in p.imap_unordered(read_energies, peptide_kd.keys()):
COMPLEX_ENERGIS[x[0]] = x[1]
LIGAND_ENERGIES[x[0]] = x[2]
Run Code Online (Sandbox Code Playgroud)
但是,这个解决方案需要花费相同的时间,就像我只是迭代peptide_kd.keys()并DataFrames逐一填充一样.为什么会这样?有没有办法并行填写所需的dicts并实际上提高速度?我在48核HPC上运行它.
不久前,我Tkinter为“你能坚持多久”挑战创建了一个应用程序。最重要的是,你必须尽可能长时间地挂在绳子上。该程序有一个秒表和一个列有参与者时间的列表。当一个人开始时,我启动秒表,他可以动态地看到他在列表中的位置。随着00:00:00时间的推移,他从最后一个位置开始,随着他手的增加而向上移动。显示了参与者上方的 3 个玩家和下方的 2 个玩家。
在Tkinter我使用了 6Label个小部件并动态更新它们。到目前为止,这很好,工作完美,但我想添加更多功能,我阅读了很多关于PyQt所以我想重写代码PyQt
到目前为止一切都很好,我创建了秒表,一个用于输入参与者姓名的输入字段。
对于动态列表,我正在考虑使用具有 3 列和 6 行的无边框表格小部件。每列将对应于:
Placement --> Name --> Time
Run Code Online (Sandbox Code Playgroud)
有没有更好或更简单的方法来实现这一目标?我应该坚持使用一些静态文本小部件而不用打扰表格吗?
我附上了有关工作Tkinter应用程序的屏幕截图。这也是我的想象Qt。
我是C++的新手,我来自Python的长篇背景.
我正在寻找一种在C++中并行运行函数的方法.我读了很多std::async,但对我来说还不是很清楚.
下面的代码做了一些非常有趣的事情
#include <future>
#include <iostream>
void called_from_async() {
std::cout << "Async call" << std::endl;
}
int main() {
//called_from_async launched in a separate thread if possible
std::future<void> result( std::async(called_from_async));
std::cout << "Message from main." << std::endl;
//ensure that called_from_async is launched synchronously
//if it wasn't already launched
result.get();
return 0;
}
Run Code Online (Sandbox Code Playgroud)
如果我多次运行它有时输出是我所期望的:
Message from main.
Async call
Run Code Online (Sandbox Code Playgroud)
但有时我得到这样的东西:
MAessysnacg ec aflrlom main.
Run Code Online (Sandbox Code Playgroud)
为什么不cout首先发生?我明确地称之为.get()方法cout.
关于并行运行.如果我有这样的代码:
#include <future>
#include <iostream>
#include <vector> …Run Code Online (Sandbox Code Playgroud)我有一个4 * 64 CPU集群。我安装了SLURM,它似乎正在工作,好像我打电话给sbatch我一样,得到了正确的分配和排队。但是,如果我使用64个以上的内核(基本上是1个以上的节点),则它会完美分配正确数量的节点,但是如果我ssh将这些内核分配到分配的节点中,则只能看到其中一个的实际工作。其余的只是坐在那里什么都不做。
我的代码很复杂,并且使用multiprocessing。我打电话给有300名工人的游泳池,所以我想这应该不是问题。
我想实现的目标是调用sbatch myscript.py200个内核,而SLURM应该在这200个内核上分配我的运行,而不仅仅是分配正确数量的节点,而实际上只使用一个。
我的python脚本的标头如下所示:
#!/usr/bin/python3
#SBATCH --output=SLURM_%j.log
#SBATCH --partition=part
#SBATCH -n 200
Run Code Online (Sandbox Code Playgroud)
我用调用脚本sbatch myscript.py。
我有一个字符串'CCCC',我想在其中匹配'CCC',重叠.
我的代码:
...
std::string input_seq = "CCCC";
std::regex re("CCC");
std::sregex_iterator next(input_seq.begin(), input_seq.end(), re);
std::sregex_iterator end;
while (next != end) {
std::smatch match = *next;
std::cout << match.str() << "\t" << "\t" << match.position() << "\t" << "\n";
next++;
}
...
Run Code Online (Sandbox Code Playgroud)
然而,这只会返回
CCC 0
Run Code Online (Sandbox Code Playgroud)
并跳过CCC 1我需要的解决方案.
我读过非贪婪的'?' 匹配,但我无法使它工作
我正在split()用C++ 实现一个类似python的函数来训练自己.我从这个SO线程中得到了这个想法:使用字符串分隔符(标准C++)在C++中解析(拆分)一个字符串
在这段代码中:
while ((pos = s.find(delimiter)) != std::string::npos) {
token = s.substr(0, pos);
std::cout << token << std::endl;
s.erase(0, pos + delimiter.length());
}
Run Code Online (Sandbox Code Playgroud)
值os pos在while循环条件内分配.
我试过同样的事情:
#include <iostream>
#include <string>
#include <algorithm>
#include <vector>
std::vector<std::string> split(std::string inp, std::string delimeter){
std::vector<std::string> res;
while (size_t pos = inp.find(delimeter) <= inp.length()){
std::cout << inp << " " << pos << std::endl ;
if (inp.substr(0, delimeter.length()) == delimeter) {
inp.erase(0, delimeter.length());
continue;
}
res.push_back(inp.substr(0, pos));
inp.erase(0, pos); …Run Code Online (Sandbox Code Playgroud) python ×6
python-3.x ×4
c++ ×3
asynchronous ×1
greedy ×1
matplotlib ×1
multiprocess ×1
pyqt4 ×1
range ×1
regex ×1
scikit-learn ×1
slurm ×1
tkinter ×1
while-loop ×1