c – 编织内联类型转换(python)
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了c – 编织内联类型转换(python),小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含1825字,纯文字阅读大概需要3分钟。
内容图文
![c – 编织内联类型转换(python)](/upload/InfoBanner/zyjiaocheng/777/4183a56b1b464dfcbed124605f3f5784.jpg)
祝2013年好!
我正在使用SciPy编织内联我的一些C代码来转置巨大的矩阵(大约200.000 x 15).它就像一个魅力,但我有一个关于类型转换的问题:
我的输入矩阵是从文件,逗号分隔等中读取的,因此所有条目都是字符串而不是浮点数(‘0.551’而不是0.551).这不影响转置函数的工作方式,但后来我必须将某些行转换为numpy float数组,所以我想知道是否可以在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代码完成吗?我尝试过使用双x =(双)行[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年之后,我在查找C代码中的内容时遇到了很多麻烦,最后它是指向数据本身的指针,而不是像documentation那样的PyArrayObject指针.编织定义了两个可供使用的变量,out_array和py_out,它们分别是PyArrayObject *和PyObject *类型.
我留下了一个替代版本的作品:weave自动定义宏< VAR> 1,< VAR> 2,< VAR> 3和< VAR> 4来访问相应数量的数组的数组尺寸.
内容总结
以上是互联网集市为您收集整理的c – 编织内联类型转换(python)全部内容,希望文章能够帮你解决c – 编织内联类型转换(python)所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。