小编wol*_*e87的帖子

大多数Pythonic方法将这两个向量相乘?

我有两个大小的矢量:

A = (32,512,640)

B = (4,512)
Run Code Online (Sandbox Code Playgroud)

我需要将A和B相乘,以便得到一个新的向量:

C = (4,32,512,640)
Run Code Online (Sandbox Code Playgroud)

另一种思考方式是矢量B的每一行沿着A的轴= -2相乘,这导致新的1,32,512,640立方体.B行的每一行可以循环形成1,32,512,640个立方体,然后可以通过使用np.concatenate或者使用它来构建C up np.vstack,例如:

# Sample vectors, where the dimensions aren't necessarily known
a = np.arange(32*512*465, dtype='f4').reshape((32,512,465))
b = np.ones((4,512), dtype='f4')

# Using a loop
d = []
for row in b:
    d.append(np.expand_dims(row[None,:,None]*a, axis=0))

# Or using list comprehension
d = [np.expand_dims(row[None,:,None]*a,axis=0) for row in b]

# Stacking the final list
result = np.vstack(d)
Run Code Online (Sandbox Code Playgroud)

但我想知道是否有可能使用类似的东西np.einsumnp.tensordot将这个矢量化全部放在一行中.我还在学习如何使用这两种方法,所以我不确定它是否合适.

谢谢!

python numpy vectorization

5
推荐指数
1
解决办法
114
查看次数

Dask add_done_callback 与其他参数?

我希望在未来完成后添加回调。

根据文档:

当回调完成时,调用未来的回调。

回调 fn 应该将 future 作为其唯一的参数。无论 future 是否成功完成、出错或被取消,都会调用此函数。

回调在单独的线程中执行。

这并没有为我提供我需要的东西,因为回调 fn 需要将 future 作为其唯一的参数。

这是我要做的事情的示例部分代码:

def method(cu_device_id):
    print("Hello world, I'm going to use GPU %i" % cu_device_id)

def callback_fn(cu_device_id)
    gpu_queue.put(cu_device_id)

cu_device_id = gpu_queue.get()
future = client.submit(method, cu_device_id)
#gpu_queue.put(cu_device_id) # Does not work, clients will shortly end up piled onto the slowest GPU
result.add_done_callback(callback_fn) # Crash / no way to pass in cu_device_id
Run Code Online (Sandbox Code Playgroud)

这里的想法是让客户端从队列中获取可用的 GPU,然后在使用完毕后将其放回到队列中,以便另一个客户端可以使用它。

解决这个问题的一种方法是将 gpu_queue 传递给客户端:

def method(gpu_queue):
    cu_device_id = gpu_queue.get()
    print("Hello world, I'm going to use …
Run Code Online (Sandbox Code Playgroud)

python distributed-computing dask

5
推荐指数
1
解决办法
2488
查看次数

C++ 11 std ::在运行时有条件?

我想做这样的事情:

void func(void *data, const int dtype)
{
    typedef typename std::conditional<dtype==0,float,double>::type DataType;

    funcT((DataType *)data);

    return;
}
Run Code Online (Sandbox Code Playgroud)

这不会编译,因为dtype需要在编译时知道.我试图避免使用switch语句,因为我正在使用8个数据类型,有许多函数,如上面的那些,通过ctypes从Python调用.

有没有像std :: conditional这样的方法可以在运行时完成,利用传入的dtype标识符?

c++ conditional std c++11

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