我正在使用STL开发一个小型的个人C++项目.我不喜欢std::在我的头文件中占有" ",因为我发现它阻碍了可读性,但同时我不想通过放入using namespace std头文件来引起自己的问题.
所以我想知道如果有一种方法来限制的范围内using声明,因此它适用于我的头文件的内容,但并不适用于包含它的文件.我试过这样的各种事情
{
using namespace std;
// header file contents here
}
Run Code Online (Sandbox Code Playgroud)
但似乎在函数定义之外不允许以这种方式引入范围.有没有办法做我想要的事情?
请注意:我真的不想讨论这是否是一个好主意,我只是想知道它是否可以完成.
我正在玩PyTorch,目的是学习它,我有一个非常愚蠢的问题:如何将矩阵乘以单个向量?
这是我尝试过的:
>>> import torch
>>> a = torch.rand(4,4)
>>> a
0.3162 0.4434 0.9318 0.8752
0.0129 0.8609 0.6402 0.2396
0.5720 0.7262 0.7443 0.0425
0.4561 0.1725 0.4390 0.8770
[torch.FloatTensor of size 4x4]
>>> b = torch.rand(4)
>>> b
0.1813
0.7090
0.0329
0.7591
[torch.FloatTensor of size 4]
>>> a.mm(b)
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
RuntimeError: invalid argument 2: dimension 1 out of range of 1D tensor at /Users/soumith/code/builder/wheel/pytorch-src/torch/lib/TH/generic/THTensor.c:24
>>> a.mm(b.t())
Traceback (most recent call last):
File …Run Code Online (Sandbox Code Playgroud) 令人讨厌的是,以下方法不起作用:
from collections import Counter
import random
c = Counter([1,1,1,1,0,0])
random.choice(c) # I expect this to return 1 with probability 2/3,
# and 0 with probability 1/3.
# It actually returns 4 or 2, with probability 1/2
Run Code Online (Sandbox Code Playgroud)
在 Python(任何版本)中从多重集采样的惯用方法是什么?
编辑是的,我确实需要使用多重集。我的实际数据要大得多,仅将其存储在列表中是不切实际的。
编辑 2我需要以合理的效率执行此操作,因为我的代码将重复执行此操作。Counter 对象中将存储大量数据,任何涉及将所有这些数据复制到新数据结构的操作都不是可行的解决方案。
这是一个非常基本的问题。在某些时候,我不小心关闭了包含我的 Jupyter 笔记本选项卡的窗口。它从我在 Chrome 中的“最近关闭的标签”中消失了。有什么方法可以重新打开与当前活动内核相对应的笔记本吗?
以防万一,它们是 julia 内核,我通过输入notebook()julia REPL 会话来启动笔记本服务器。
我想将Python hash()函数返回的值映射到0到1范围内的浮点数.在我的系统上,我可以使用
scale = 1.0/(2**64)
print hash(some_object)*scale+0.5
Run Code Online (Sandbox Code Playgroud)
但是,我知道这在32位系统上会有所不同.我很可能永远不会在其他任何地方运行此代码,但我仍然想知道是否有一种方法可以通过编程方式确定Python内置hash()函数可以返回的最大值和最小值.
(顺便说一下,我这样做的原因是我正在开发一个数值模拟,我需要从给定的Numpy数组中始终生成相同的伪随机数.我知道内置的哈希不会有对此最好的统计数据,但速度很快,因此将其用于测试目的很方便.)
std::set如果它指向的项被删除,则迭代器变为无效.(如果以任何其他方式修改集合,它不会失效,这很好.)但是,无法检测迭代器是否已失效.
我正在实现一种算法,要求我能够以std::set这样的方式跟踪a的成员,以便我可以在恒定的时间内擦除它们,但如果我尝试删除相同的两次,则不会冒未定义的行为的风险.如果我有两个指向同一个成员的迭代器set,那么如果我试图擦除它们,就会发生坏事.
我的问题是,我该如何避免这种情况?有没有办法实现像迭代器一样的东西set,但是它知道什么时候它已经失效?
顺便说一句,我正在使用,std::set因为这是一个性能危急的情况,我需要set提供的复杂性保证.我很乐意接受建议不同数据结构的答案,但前提是它允许我(a)在恒定时间内访问和删除最小元素,(b)在恒定时间内删除指向元素,并且(c) )在O(log(N))时间或更好的时间插入元素.C++ 11没问题.
我想在 OS X 上的命令行应用程序中执行以下操作:
while (true) {
// do some task
if (user_has_pressed('x')) {
// break out of the loop and do something different
}
}
Run Code Online (Sandbox Code Playgroud)
为清楚起见,我不希望程序阻塞等待用户输入。我正在运行一个需要很多小时才能运行的数值模拟,我想按一个键来打印有关其进度的详细统计信息,或者中断它并更改参数等。
有一些现有的类似 问题,但答案要么建议仅使用 Windowsgetch功能,要么将终端切换到不同的输入模式。我不想这样做,因为我需要保留在ctrl-c不弄乱终端的情况下中断的能力。
我不想构建 Cocoa 应用程序,也不关心跨平台。我只是在寻找一种最简单快捷的方法来在一个只能在我自己的机器上运行的命令行应用程序中完成它。
我想一种选择是使用 ncurses。从简短的阅读来看,这似乎是一个比我想要的更重的选择 - 但是如果有人会发布一个简单的最小示例来完成上述任务,那将非常有帮助。
我有一些自动生成 C 函数的 Python 代码。该函数接受一些双精度数作为输入并返回一个双精度数,同时调用 C 标准库中的各种函数。
我想做的一件事是将其编译成 numpy ufunc 并将其加载到正在运行的 Python 进程中。我只希望该函数以合理的速度在其输入 numpy 数组(例如 numpy 的数组)上按元素运行minimum。
我很惊讶我找不到如何执行此操作的明确说明或示例。Numpy 有关于编写扩展的明确说明,但不清楚如何将它们加载到当前的 Python 进程中。使用 ctypes,我可以编译我的函数并加载它,没问题,但不清楚如何使其成为 ufunc 而不是普通的 Python 函数。Cython 也可以做到这一点,如果我使用pyximport它,甚至可以为我构建共享库,这是理想的,因为这样我就可以分发它,而不必担心如何在另一个系统上构建 C 代码。但同样不清楚如何制作 ufunc 而不是普通函数。
TL;DR:如何将一个简单的 C 函数编译成 ufunc,并动态加载它?越简单、样板越少越好。
我一直在 Jupyter 笔记本中对一些 Julia 代码进行原型设计,但它已经超出了笔记本格式,我想将其放入脚本中以便正确组织它。但是,我无法弄清楚如何让绘图在脚本中工作,也找不到任何有关它的文档。
这是一个最小的不起作用的示例:
using Plots
gr()
display(plot([1,3,2]))
println("here")
Run Code Online (Sandbox Code Playgroud)
此代码需要 20-30 秒来导入绘图,然后打开一个窗口,但立即再次关闭它,打印“此处”,然后退出。导入过程发生时我无法使用 ctrl-C。
所以,我有三个问题:
如何防止绘图窗口一打开就关闭?我想要的是脚本阻止或(理想情况下)进入事件循环,直到窗口关闭,然后终止。
能否以某种方式缩短极长的导入时间?
是否存在在 Jupyter 环境之外使用 Plots 的文档?
如果有什么不同的话,我在 Mac 上使用 julia 1.1.1。
这是由 julia 的 Plots 库使用属性生成的图xaxis=:log:
该图具有均匀间隔的刻度线,带有 10^0.25 等标签。这有时可能很有用,但我发现这个图有点令人困惑,因为大多数人不查的话都不知道 10^0.25 的值。
我希望 x 轴具有对数间隔的刻度,表示 x 轴上数量的均匀间隔。semilogx下面是一个在 Python库中使用生成的快速示例来说明我的意思matplotlib:
在此图中,x 轴在 x=1、x=2、x=3 等处有刻度,我发现这对于我生成的数字更有用。在 Julia 中可以使用 Plots 来实现这一点吗?