Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/365.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 将数组/列表转换为字典的有效方法是什么?_Python_Arrays_Performance_Dictionary - Fatal编程技术网

Python 将数组/列表转换为字典的有效方法是什么?

Python 将数组/列表转换为字典的有效方法是什么?,python,arrays,performance,dictionary,Python,Arrays,Performance,Dictionary,我试图以最有效(意味着最快)的方式将数组信息转换为列表 我有一个我称之为node_map的列表,我想成为字典的键,然后是一个node_坐标的3D数组(node_coords_tmp),我想与node_map关联 节点映射看起来像: [1,2,3,4,5] 节点坐标在最初打印时报告为: (<exodus.c_double_Array_8352100 object at 0x2c2d8c0>, <exodus.c_double_Array_8352100 object at 0x

我试图以最有效(意味着最快)的方式将数组信息转换为列表

我有一个我称之为node_map的列表,我想成为字典的键,然后是一个node_坐标的3D数组(node_coords_tmp),我想与node_map关联

节点映射看起来像:

[1,2,3,4,5]
节点坐标在最初打印时报告为:

(<exodus.c_double_Array_8352100 object at 0x2c2d8c0>, <exodus.c_double_Array_8352100 object at 0x2c2d5f0>, <exodus.c_double_Array_8352100 object at 0x2c2d560>)

这是我想要的,但是对于我正在处理的阵列的大小来说,速度比我想要的要慢。有没有更好的方法使用numpy或其他形式来实现这一点?谢谢。

试试听写理解

node_coords = { i: (node_coords_tmp[0][ct],
                    node_coords_tmp[1][ct],
                    node_coords_tmp[2][ct]) for ct, i in enumerate(node_map) }

你如何想象在不到O(n)个时间内填充一本字典?你必须迭代每一项。它将是O(n),但系数可能是重要的,这取决于OP处理的具体n。@dimo并非所有具有相同对数算法估计的算法都在同一时间执行。当然不是,但是如果你关心的是输入的大小,那么你是在问渐进复杂性。Chad,谢谢。我不得不去python2.6命名法(你认为这会有时间惩罚吗,用2.6而不是2.7风格的dict理解?)。速度快了大约5%,这是一个进步,但我也可能需要跳到一些类似的东西。通过使用np.add而不是压缩列表理解中的求和,我显著加快了一些列表方式的添加,并希望能在这里找到类似的内容。我可能会转向一种新的方法,或是通过MPI。再次感谢。这应该与使用
dict((i,(…)进行ct,i在enumerate(…)
node_coords = { i: (node_coords_tmp[0][ct],
                    node_coords_tmp[1][ct],
                    node_coords_tmp[2][ct]) for ct, i in enumerate(node_map) }