编织内联类型转换(python)
Weave inline typecasting (python)
新年快乐!
我使用SciPy的编织与我的一些c++代码内联来转置巨大的矩阵(大约200.000 x 15)。它像一个魅力,但我有一个关于类型转换的问题:
我的输入矩阵是从文件中读取的,逗号分隔等,所以所有条目都是字符串而不是浮点数('0.551'而不是0.551)。这并不影响转置函数的工作方式,但后来我不得不将某些行转换为numpy浮点数组,所以我想知道这是否可以在c++代码中完成。让我用一些代码来解释:
def transpose(lines, N, x):
code = """
py::list matrix;
for(int i = 0; i < x; i++) {
py::list line;
if(i == 1) { continue; }
for(int j = 0; j < N; j++) {
line.append(lines[j][i]);
}
matrix.append(line);
}
return_val = matrix;
"""
return weave.inline(code, ['lines', 'N', 'x'])
matrix = [['0.5','0.1'],['0.2','0.2']]
matrixT = transpose(matrix, len(matrix), len(matrix[0]))
final_result = np.array(matrixT[0], dtype=float)
在示例中,我的小矩阵将被转置,我的示例结果将是转置矩阵的第一行转换为dtype float的numpy数组。这可以在c++代码中完成吗?我尝试过使用double x = (double) lines[j][i]
和类似的东西,但它不知何故不能用于附加到py::list对象。
下面的代码可以完成您需要的全部内容:
def transpose(lines):
code = """
for(int i = 0; i < x; i++) {
for(int j = 0; j < N; j++) {
out[j + i * N] = atof(lines[j][i]);
// OUT2(i, j) = atof(lines[j][i]);
}
}
"""
N = len(lines)
x = len(lines[0])
out = np.empty((x, N), dtype=np.float64)
weave.inline(code, ['lines', 'N', 'x', 'out'])
return out
>>> matrix = [['0.5', '0.1', '0.7'],['0.2','0.2', '0.4']]
>>> matrix
[['0.5', '0.1', '0.7'], ['0.2', '0.2', '0.4']]
>>> transpose(matrix)
array([[ 0.5, 0.2],
[ 0.1, 0.2],
[ 0.7, 0.4]])
除了在没有写任何C的情况下不断忘记;
之后的6年,我有很多麻烦弄清楚out
在c++代码中变成了什么,最后它是一个指向数据本身的指针,而不是文档所述的PyArrayObject
。有两个由weave定义的变量可供使用,out_array
和py_out
,它们的类型分别是PyArrayObject*
和PyObject*
。
我把这个赋值的另一个版本注释掉了:weave自动定义宏<VAR>1
、<VAR>2
、<VAR>3
和<VAR>4
来访问相应维数的数组项。
相关文章:
- 有关插入适配器的错误。[错误]请求从 'back_insert_iterator<vector<>>' 类型转换为非标量类型
- 处理小于cpu数据总线的数据类型.(c++转换为机器代码)
- C++中的双指针类型转换
- 逐位操作的隐式类型转换
- 模板中的类型转换
- 在 C++(和 C)中进行类型转换时明显不一致
- 字符类型转换不兼容
- 将复杂的非基元C++数据类型转换为 Erlang/Elixir 格式,以使用 NIF 导出方法
- 如何在C++中将 Python 字符串转换为其转义版本?
- C++:用户定义的显式类型转换函数错误
- 将类指针类型转换为键时出错
- 通过引用传递参数时C++类型转换
- 在 C++ 中将一个模板类型的对象类型转换为另一个模板类型
- C++显式类型转换(C 样式强制转换)的强制表示法和static_cast的多种解释
- C++无效的函数类型转换
- 如何将 Python 对象转换为 Cython 扩展类型的 std::vector 并返回?
- pybind11:Python 到 C++ 数据类型转换不起作用
- 如何在Cython中将Python对象转换为C++类型
- 使用 Python C-API 强制类型转换
- 编织内联类型转换(python)