简而言之,我有一种在两个维度上迭代的毕达哥式方法,但因为它是大数字和多个数组,所以我想要tile_iternumpy版本,而不是列表理解中的DUAL FOR循环.我希望它是与所示相同的值,但在相同形状的2D Numpy数组中(而不是仅使用np.array包装转换当前数组-我试图避免列表理解)

以下是我目前所拥有的最小化、简化版本:

import numpy as np

x_cam_screen_range = np.linspace((6, 0), (18, 1), 3)
y_cam_screen_range = np.linspace((-3, 0), (3, 1), 3)
tile_iter = [(x, screen_x, y, screen_y)
             for x, screen_x in x_cam_screen_range
             for y, screen_y in y_cam_screen_range]

# current list response:
# [(6.0, 0.0, -3.0, 0.0),
# (6.0, 0.0, 0.0, 0.5),
# (6.0, 0.0, 3.0, 1.0),
# (12.0, 0.5, -3.0, 0.0),
# (12.0, 0.5, 0.0, 0.5),
# (12.0, 0.5, 3.0, 1.0),
# (18.0, 1.0, -3.0, 0.0),
# (18.0, 1.0, 0.0, 0.5),
# (18.0, 1.0, 3.0, 1.0)]

有没有办法让我以一种麻木友好的方式创建tile_iter个?如果有一个现有的问题反映了这一点,我无论如何都找不到(但如果你能找到,我将不胜感激).

推荐答案

一个可能的答案是,执行与您的元组列表非常类似的操作

(np.linspace((0.5,0,0,0),(0.5,1,0,0), resolution_x)[:,None,:]+np.linspace((0,0,-0.37,0),(0,0,0.37,1),resolution_y)[None,:,:]).reshape(-1,4)

将0,0填充到linspace参数,以便+完成所有广播,这对我来说可能是某种懒惰.在广播时连接2对可能是可能的.

但主要思想是,在(resolution_x,1,4)形数组和(1,resolution_y,4)形数组之间执行运算(这里是+)通常(+就是这种情况)会使NumPy执行resolution_xresolution_y的双重迭代,以计算所有resolution_x*resolution_y种可能的组合.因此,这是迭代双循环的麻木方法.(也就是说,永远不要白化for循环,而要在内部使用NumPy)

使用更新的数据,并将计算分成多行

x_cam_screen_range = np.linspace((6, 0,0,0), (18, 1,0,0), 3)
y_cam_screen_range = np.linspace((0,0,-3, 0), (0,0,3, 1), 3)
tile_iter = (x_cam_screen_range[:,None,:]+y_cam_screen_range[None,:,:]).reshape(-1,4)
#array([[ 6. ,  0. , -3. ,  0. ],
#       [ 6. ,  0. ,  0. ,  0.5],
#       [ 6. ,  0. ,  3. ,  1. ],
#       [12. ,  0.5, -3. ,  0. ],
#       [12. ,  0.5,  0. ,  0.5],
#       [12. ,  0.5,  3. ,  1. ],
#       [18. ,  1. , -3. ,  0. ],
#       [18. ,  1. ,  0. ,  0.5],
#       [18. ,  1. ,  3. ,  1. ]])

Python相关问答推荐

Gekko解算器错误results.json未找到,无法找出原因

单击cookie按钮,但结果不一致

为什么我的主页不会重定向到详细视图(Django)

如何使用函数正确索引收件箱?

KNN分类器中的GridSearchCV

使用Python Cerberus初始化一个循环数据 struct (例如树)(v1.3.5)

NumPy中的右矩阵划分,还有比NP.linalg.inv()更好的方法吗?

使用from_pandas将GeDataFrame转换为polars失败,ArrowType错误:未传递numpy. dype对象

Pandas :多索引组

如何使用SubProcess/Shell从Python脚本中调用具有几个带有html标签的参数的Perl脚本?

列表上值总和最多为K(以O(log n))的最大元素数

仅从风格中获取 colored颜色 循环

使用索引列表列表对列进行切片并获取行方向的向量长度

log 1 p numpy的意外行为

当独立的网络调用不应该互相阻塞时,'

如果条件不满足,我如何获得掩码的第一个索引并获得None?

* 动态地 * 修饰Python中的递归函数

如何使用OpenGL使球体遵循Python中的八样路径?

如何获取Python synsets列表的第一个内容?

关于两个表达式的区别