重构(“使用meshgrid的输出来创建新的meshgrid”)

2024-05-16 20:37:46 发布

您现在位置:Python中文网/ 问答频道 /正文

假设我有三个网格

a = arange(0,5)
b = arange(0,3)
c = arange(10,12)

出于某种原因,在我的代码中,我首先需要网格

A, B = meshgrid(a,b,indexing='ij')

有没有捷径可以让我做

A, B, C = remeshgrid(A, B, c, indexing='ij)

这样ABC都对应于meshgrid(a,b,c,index='ij')?你知道吗

场景如下。 -我首先有a,b和网格a,b -稍后,我生成c -在这一点上,我需要重新刷新所有包含c的代码,但是代码不再有a,b可供使用了。你知道吗

所以现在需要权衡调整代码以传递a,b——如果重新划分a,b是不可能的或者效率太低。你知道吗

你们有什么想法吗?你知道吗


Tags: 代码网格index场景捷径效率indexingij
2条回答

基于davidmm的想法,您可以使用A[:,0]B[0,:]。即使AB包含重复的值,这种方法也会起作用;获取切片比调用np.unique要快。你知道吗

In [71]: A[:,0]
Out[71]: array([0, 1, 2, 3, 4])

In [72]: B[0,:]
Out[72]: array([0, 1, 2])

In [73]: A, B, C = np.meshgrid(A[:,0], B[0,:], c, indexing='ij')

您可以使用唯一元素重构ab

print A
array([[0, 0, 0],
       [1, 1, 1],
       [2, 2, 2],
       [3, 3, 3],
       [4, 4, 4]])

print B
array([[0, 1, 2],
       [0, 1, 2],
       [0, 1, 2],
       [0, 1, 2],
       [0, 1, 2]])

np.unique(A)
array([0, 1, 2, 3, 4])

np.unique(B)
array([0, 1, 2])

相关问题 更多 >