设x,y,z为矩阵表示,使得(x [i,j],y [i,j],z [i ,j])对应某个点。Numpy:给定每个坐标矩阵分别构造点矩阵的替代方法
不是有3个变量,我们只想要一个变量(点),其中“点[i,j] =(x [i,j],y [i,j],z [i,j]) “和 ”点[I,J,0] = X [I,J]“
实施例:
import numpy as np
x = np.array([[1, 1],
[2, 2]])
y = np.array([[1, 2],
[1, 2]])
z = np.array([[3, 4],
[5, 6]])
Points = np.array([[ [1, 1, 3], [1, 2, 4] ],
[2, 1, 5], [2, 2, 6] ]])
目前我已经想到了一些解决方案的:
第一解决方案:
from itertools import izip
Temp_List=[]
for xi, yi, zi in izip(x, y, z):
Temp_List.append([(xij, yij, zij) for xij, yij, zij in izip(xi, yi, zi)])
Points=np.array(Temp_List)
我知道拆包元组收拾一遍是不是很聪明,但 为使其更具可读性,并准备下一个解决方案
第二个解决方案的缘故:#一个班轮
from itertools import izip
Points=np.array([zip(xi, yi, zi) for xi, yi, zi in izip(x,y,z)])
我非常喜欢这个选项。但是,在这个解决方案中,我关心可读性。也许这只是我,但我觉得列表理解在例子中产生类似于点的东西并不那么明显。除非你熟悉izip和zip之间的区别。
很明显,另一种解决方案是使用索引来遍历元素x,y和z,就像在其他语言中一样(对于我在xrange(...)中:对于在xrange(...)中的j:do stuff .. )
结论: 是否有另一种方法使用numpy函数(或不是)来改进可读性,内存消耗或性能,从x,y,z生成Points变量?
只需使用:'np.dstack((x,y,z))'? – Divakar
旧的'dstack','hstack'和'vstack'函数现在不赞成使用'stack'。在这种情况下'np.stack([x,y,z],axis = 2)' – MaxNoe
感谢这两个答案,正是我一直在寻找的!我对numpy还不是很熟悉。此外,我已经运行了一些测试,对于小型矩阵,性能大致相同,但是当使用更大的矩阵时,np.stack会压倒其他解决方案。从我在其他问题中读到的内容来看,它也应该更有记忆效率 –