我有一个 ipynb 文件(一个 jupyter 笔记本),我在 vscode 中使用 python 扩展名打开它。我收到标题中的错误
Unexpected token # in JSON at position 0
我根本不明白,因为该文件应该被解释为 python 文件。
我可以将扩展名更改为 .py 并通过 vscode 很好地打开它,但我没有装饰器来运行/调试单元格,如此处定义的(https://code.visualstudio.com/docs/python/jupyter-support-py) 。
我知道该文件是正确的,因为我已在另一台计算机上的另一个 vscode 安装中使用它并且工作正常。
我不知道我的环境中可能配置错误......任何顶部都会非常有帮助。
这是我的实际 python 代码,它在我的实际环境中产生了上述错误。
问题.ipynb
# %%
import world as w
import world_eg as weg
import world_case1 as wc1
import simulator_static as simulation
import numpy as np
from scipy.optimize import minimize
import matplotlib.pyplot as plt```
From the error, I understand that is parsing the file as a JSON file …
Run Code Online (Sandbox Code Playgroud) 我试图创建一些工具来创建基于其他类型组合的类型列表。
可以说我们有三种类型
struct A{};
struct B{};
struct C{};
Run Code Online (Sandbox Code Playgroud)
我想获得一个元组列表,其中包含N,A,B或C个类型的所有可能组合。
对于N = 2的情况,这将是
std::tuple<A,A>
std::tuple<A,B>
std::tuple<A,C>
std::tuple<B,A>
std::tuple<B,B>
std::tuple<B,C>
std::tuple<C,A>
std::tuple<C,B>
std::tuple<C,C>
Run Code Online (Sandbox Code Playgroud)
这个想法是创建一个元组来容纳所有这些类型的容器,因此我以后可以在容器列表中存储任何这些类型。
template <typename ...Combinations>
using CombinationList = std::tuple<std::vector<Combinations>...>;
Run Code Online (Sandbox Code Playgroud)
我已经有一种机制可以在适合的容器中插入一个特殊的元素,但是我对如何创建组合一无所知。
在人们建议使用的评论上std::vector<Combination<std::variant<A,C,B>, std::variant<A,B,C>>>
。尽管这从技术上解决了问题,但我不喜欢使用它,因为A,BC的大小非常不同,并且我不想在运行时访问变体。另外,在某些时候,我需要将所有数据上传到
std::tuple<std::vector<Combination>...>
Run Code Online (Sandbox Code Playgroud)
到GPU,所以我不能在这里使用std :: variant。
我该怎么办?
谢谢!
PD:这与一个问题有关(一个枚举值(729个组合...)的组合爆炸)。 在这个问题中,我问我如何轻松生成将放入容器内的类型。现在我需要生成容器。
c++ cartesian-product template-meta-programming variadic-templates c++14
我是一名 GPGPU 开发人员,我使用 CUDA 完成了所有工作。最近,我为我的家庭设置购买了 AMD GPU,并且我一直在阅读有关 SYCL 和 oneAPI 的文章,但我不确定我是否理解它们是什么,它们是如何互补的。如果我理解正确的话,SYCL 是 Khronos 开发的一个标准,它允许在 C++ 中创建并行软件。它需要一个由 SYCL 实现提供的自定义工具链,并且存在多个实现。
另一方面,oneAPI 是 SYCL 的一个实现,带有一些额外的扩展(将来可能会添加到 SYCL 标准中)和一些带有典型并行库的库,对吗?
因为我有一个AMD GPU,我想用它来做一些GPGPU,但生态系统有点吓人。我们有台面驱动程序、AMD 驱动程序、不同的 openCL 实现、HIP ……这一切是如何组合在一起的?
假设我有一个如下所示的模板
template <typename T>
struct A {};
Run Code Online (Sandbox Code Playgroud)
在另一个类中存储该模板的不同实例化向量的最佳方法是什么?
我考虑过类似的事情,但是当然,它迫使我声明所有我不想支持的类型,在我的特殊情况下,这可能会迅速升级。
template <typename ...Args>
struct Holder
{
std::tuple<std::vector<Args>...> tup;
template <typename T>
void push_back(T &&t); // Method to insert in the appropiate vector, considering only one match
}
Run Code Online (Sandbox Code Playgroud)
鉴于我有 Push_back 方法,我用它来将元素插入元组中的适当向量中,并且除了使用 Push_back 方法插入的类型之外我不需要任何其他类型,是否有更好的方法来定义持有者?
编辑:理想情况下,我希望能够在元组的不同元素上调用函数模板。
通用调用
template <typename T>
void foo(T t)
Run Code Online (Sandbox Code Playgroud)
对 A 的实际实例化的专门调用
template <typename T>
void foo(A<T> t)
Run Code Online (Sandbox Code Playgroud) 我在尝试链接 MSVC 中的库时遇到问题。我为发布和调试编译了一些外部依赖项,并将它们设置在不同的文件夹中(${PROJECT_SOURCE_DIR}/External/Debug/lib 和 ${PROJECT_SOURCE_DIR}/External/Release/lib)。我已经编写了一些 FindFoo.cmake 模块,它们作为 find_library 命令的提示 ${EXTERNAL_LIB_DIR},它根据 ${CMAKE_BUILD_TYPE} 设置。
这项工作在 Linux 上很完美,但在 Windows 中失败(它总是将 EXTERNAL_LIB_DIR 路径设置为调试路径)并且由于 _ITERATOR_DEBUG_LEVEL 而无法链接。
这是我正在使用的 FindFoo.cmake 的示例。
FIND_PATH(SOIL_INCLUDE_DIR
NAMES SOIL/SOIL.h
PATHS
${EXTERNAL_DIR}/soil/inc
NO_DEFAULT_PATH
)
find_library(
SOIL_LIBRARY
NAMES SOIL soil soil_debug
PATHS
${EXTERNAL_LIB_DIR}
NO_DEFAULT_PATH
)
INCLUDE(FindPackageHandleStandardArgs)
FIND_PACKAGE_HANDLE_STANDARD_ARGS(SOIL DEFAULT_MSG SOIL_LIBRARY S
SOIL_INCLUDE_DIR)
if (${SOIL_FOUND})
SET(SOIL_INCLUDE_DIRS ${SOIL_INCLUDE_DIR})
SET(SOIL_LIBRARIES ${SOIL_LIBRARY})
endif()
MARK_AS_ADVANCED( SOIL_LIBRARY SOIL_INCLUDE_DIR )
Run Code Online (Sandbox Code Playgroud)
而这里创建EXTERNAL_LIB_DIR #设置外部库
set(EXTERNAL_DIR ${PROJECT_SOURCE_DIR}/External)
if (${CMAKE_BUILD_TYPE} MATCHES Debug)
set(EXTERNAL_LIB_DIR ${PROJECT_SOURCE_DIR}/External/lib/Debug)
else()
set(EXTERNAL_LIB_DIR ${PROJECT_SOURCE_DIR}/External/lib/Release)
endif()
message(STATUS "Using libraries in ${EXTERNAL_LIB_DIR}")
Run Code Online (Sandbox Code Playgroud)
我应该如何修改创建 EXTERNAL_LIB_DIR 变量的 …
我想用索引迭代三个列表。为此,我尝试使用enumerate(zip(x, y, z))
,但是当我尝试解压它时,它失败了
[f.write('mVtet0.row({}) = Eigen::Vector3d({}, {}, {})\n'.format(i, x,y,z) for i, x, y, z in enumerate(zip(x,y,z))]
Run Code Online (Sandbox Code Playgroud)
给出以下错误:ValueError: not enough values to unpack (expected 4, got 2)
我理解这个问题, enumerate 创建一个带有索引和 zip 结果的元组。打开所有东西的正确方法是什么?
我正在尝试将 lambda 应用于 std::array 的元素。
\n std::array<int, 4> fixIndices = {1, 60, 127, 187};\n\n std::apply(\n [](int id) {\n std::cout << id;\n },\n fixIndices);\n
Run Code Online (Sandbox Code Playgroud)\n但是,这个简单的代码无法编译
\n/usr/lib/gcc/x86_64-pc-linux-gnu/10.3.0/include/c++/tuple:1727:27: error: no matching function for call to \xe2\x80\x98__invoke(****)::<lambda(int)>, int&, int&, int&, int&)\xe2\x80\x99\n 1727 | return std::__invoke(std::forward<_Fn>(__f),\n | ~~~~~~~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~\n 1728 | std::get<_Idx>(std::forward<_Tuple>(__t))...);\n
Run Code Online (Sandbox Code Playgroud)\n我缺少什么?
\n我有一个类,可以从空结构或具有某些成员的结构继承,具体取决于bool
. 使用相同的方法bool
,我添加一个if constexpr
块来访问基类的成员,但出现编译器错误
struct A{};
struct B{};
struct C{};
template <typename J0, typename J1>
struct HasFriction {
constexpr static bool value = false;
};
template <> struct HasFriction<A,B> {
constexpr static bool value = true;
};
template <bool> struct Friction { };
template <> struct Friction<true> { int value = 4; };
template <typename J0, typename J1>
struct MyStruct : public Friction<HasFriction<J0, J1>::value> {};
int main()
{
if constexpr (HasFriction<A, C>::value) {
MyStruct<A,C> f; …
Run Code Online (Sandbox Code Playgroud) 我有两个向量,我想做类似的事情
v2[i] = v1[i] +v2[i];
Run Code Online (Sandbox Code Playgroud)
我试过了std::copy
,但显然只能这样做v2[i] = v1[i];
STL 中是否有任何算法可以执行此求和?
我正在尝试使用 clangd 在 vscode 中完成代码。我正在使用 CMake 进行项目设置,并创建一个编译数据库。但是,我有几个具有不同标志的构建目录(调试、发布...),并且 clangd 要求在源目录中包含编译数据库。这是不可能的,因为每种构建类型的编译数据库都不同......
当您有多种构建类型时,有什么方法可以使用 clangd 吗?