c – 编织内联类型转换(python)
祝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,'x','out']) return out >>> matrix = [['0.5','0.1','0.7'],'0.2','0.4']] >>> matrix [['0.5','0.4']] >>> transpose(matrix) array([[ 0.5,0.2],[ 0.1,[ 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# – 使用LINQ获取项目列表,其中项目包含来自另一个列表的
- reactjs – react-create-app使用font-awesome
- ruby-on-rails-3 – 从Rails应用程序中获取当前的Git提交版
- 一个完整的Ajax开发示例:二级联动
- ruby-on-rails – 在scss文件轨道中的asset_path
- ruby – 如何重置模拟类方法的期望?
- objective-c – 在iphone中全局访问整数和字符串?
- oracle_01
- c – Void指针初始化?如果没有,那是什么?
- 仿百度文库方案[openoffice.org 3+swftools+flexpaper](五)