小编Mr *_*uid的帖子

Pycharm 使用 Docker Container Python 作为远程解释器

我试图在远程机器上的 docker 容器中使用 python 作为 Pycharm 中的解释器。既然是一口,这里是一张图:

在此处输入图片说明

容器中运行着一个 Jupyter Notebook,我可以通过本地浏览器连接到它(尽管这只是为了测试连接)。我用来启动 Docker 容器的命令是

docker run --runtime=nvidia -it --rm --shm-size=2g -v /home/timo/storage:/storage -v /etc/passwd:/etc/passwd -v /etc/group:/etc/group --ulimit memlock=-1 -p 8888:8888 -p 7722:22 --ipc=host latest:latest
Run Code Online (Sandbox Code Playgroud)

我可以转发运行 Jupyter 笔记本的端口 8888,ssh -L 8888:0.0.0.0:8888 BBB.BBB.BBB.BBB从而在本地机器上使用它。但是我不太喜欢使用 Jupyter 进行开发,并且想在 Pycharm 的 Docker Container 中使用 Python 解释器。

当我在 Pycharm 中选择“添加 Python 解释器”时,我得到以下选项:

在此处输入图片说明

Pycharm的文档建议使用“添加 Python 解释器/Docker”工具,如下所示:

在此处输入图片说明

然而,如果 Docker 在远程机器上,文档并没有说明如何设置 Docker 容器和连接。

所以我的问题是:我应该使用 Unix 还是 TCP 套接字连接到我的远程 docker?或者我应该以某种方式转发容器中的所有相关端口并使用“SSH Interpreter”选项?如果是这样,我该如何设置这一切?我是否首先正确设置了我的 Docker 容器?

在过去的两天里,我想我已经浏览了每个论坛和在线资源,但还没有更接近于让它发挥作用。我也试图让它在 Spyder 中工作,但也无济于事。所以任何建议都非常感谢!

非常感谢!

ssh portforwarding pycharm docker

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

在 Docker 容器中将 Spyder 连接到远程 Jupyter Notebook

我一直在尝试将 Spyder 连接到在远程服务器上运行的 docker 容器,但一次又一次地失败。这是我想要实现的目标的快速图表:

“我令人沮丧的情况”

目前我正在通过 ssh 在远程机器上启动 docker 容器

docker run --runtime=nvidia -it --rm --shm-size=2g -v /home/timo/storage:/storage -v /etc/passwd:/etc/passwd -v /etc/group:/etc/group --ulimit memlock=-1 -p 8888:8888 --ipc=host ufoym/deepo:all-jupyter
Run Code Online (Sandbox Code Playgroud)

所以我在端口 8888 上转发。然后在我正在运行的 docker 容器内

jupyter notebook --no-browser --ip=0.0.0.0 --port=8888 --allow-root --notebook-dir='/storage' 
Run Code Online (Sandbox Code Playgroud)

好的,现在是 Spyder 部分 - 根据此处的说明,我转到~/.local/share/jupyter/runtime,在其中找到以下文件:

kernel-ada17ae4-e8c3-4e17-9f8f-1c029c56b4f0.json  nbserver-11-open.html  nbserver-21-open.html  notebook_cookie_secret
kernel-e81bc397-05b5-4710-89b6-2aa2adab5f9c.json  nbserver-11.json       nbserver-21.json
Run Code Online (Sandbox Code Playgroud)

不知道拿哪一个,我把它们全部复制到我的本地机器上。

我现在转到 Consoles->Connect to an Existing Kernel,这给了我“Connect to an Existing Kernel”窗口,我按原样填写(当然使用我的实际远程 IP 地址):

“连接到现有内核”

(这里我为 选择了第一个 json 文件Connection info:)。我按下回车键,Spyder 变暗并崩溃。

“Spyder 变黑并崩溃”

无论我选择哪个连接信息文件,都会发生这种情况。所以,我的问题是: …

spyder docker jupyter-notebook

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

Numpy 点云到图像

我有一个看起来像这样的点云:

点云

红点是点,黑点是投影到 xy 平面的红点。虽然它在图中不可见,但每个点也有一个值,当该点移动到 xy 平面时,它会添加到给定的像素。这些点由一个 numpy ( np) 数组表示,如下所示:

points=np.array([[x0,y0,z0,v0],[x1,y1,z1,v1],...[xn,yn,zn,vn]])
Run Code Online (Sandbox Code Playgroud)

将这些点放入某个图像的明显方法是通过一个简单的循环,如下所示:

image=np.zeros(img_size)

for point in points:
    #each point = [x,y,z,v]
    image[tuple(point[0:2])] += point[3]
Run Code Online (Sandbox Code Playgroud)

现在这工作正常,但速度很慢。所以我想知道是否有某种方法可以使用矢量化、切片和其他聪明的 numpy/python 技巧来加速它,因为实际上对于大型点云我必须多次这样做。我想出了一些使用np.put

def points_to_image(xs, ys, vs, img_size):
    img = np.zeros(img_size)
    coords = np.stack((ys, xs))
    #put the 2D coordinates into linear array coordinates
    abs_coords = np.ravel_multi_index(coords, img_size)
    np.put(img, abs_coords, ps)
    return img
Run Code Online (Sandbox Code Playgroud)

(在这种情况下,这些点被预先分割成包含 x、y 和 v 分量的向量)。虽然这工作正常,但它当然只将最后一个点放在每个给定的像素上,即它不是可加的。

非常感谢您的帮助!

python arrays numpy vectorization

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

如何使用 pytorch 的 grid_sample()?

我在torch.nn.functional按照自己的意愿工作时遇到了一些麻烦,如下例所示:

import torch
import torch.nn.functional as F
import numpy as np

sz = 5
input_arr = torch.from_numpy(np.arange(sz*sz).reshape(1,1,sz,sz)).float()
indices = torch.from_numpy(np.array([-1,-1, -0.5,-0.5, 0,0, 0.5,0.5, 1,1]).reshape(1, 1, 5, 2)).float()

out = F.grid_sample(input_arr, indices)
print(input_arr)
print(out)
Run Code Online (Sandbox Code Playgroud)

由于索引只是输入的对角线,我希望得到类似的结果tensor([[[[0., 6., 12., 18., 24.]]]])(因为 (-1,-1) 应该给出左上角,而 (1,1) 应该给出右下角,根据文档) . 但是,我将其作为输出到控制台:

tensor([[[[ 0.,  1.,  2.,  3.,  4.],
          [ 5.,  6.,  7.,  8.,  9.],
          [10., 11., 12., 13., 14.],
          [15., 16., 17., 18., 19.],
          [20., 21., 22., 23., 24.]]]])
tensor([[[[ 0.0000,  4.5000, …
Run Code Online (Sandbox Code Playgroud)

pytorch

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

C++继承:将子类传递给期望基类的函数并获取子类行为

在下面的玩具示例中,我有一个基类和一个继承自它的类.子类重写该方法doSomething().但是,当我将子类的实例传递给期望基类的函数时,我得到基类的行为,即输出I'm the base class!而不是I'm the child class!.我怎样才能防止这种情况发生?为什么会发生这种情况(我猜有某种隐式转换正在进行?).

非常感谢!

#include <iostream>

using namespace std;

class BaseClass {
public:
    void doSomething() {
        cout << "I'm the base class!";
    }
};

class SubClass : public BaseClass {
public:
    void doSomething() {
        cout << "I'm a child class!";
    }
};

void thisFunction(BaseClass & instance) {
    instance.doSomething();
}

int main(int, char*[]) {
    SubClass sc;
    thisFunction(sc);
}
Run Code Online (Sandbox Code Playgroud)

c++ polymorphism inheritance

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