简而言之,我有一种类似Python的方式来迭代二维,但由于它使用的是大数字和多个数组,所以我希望使用tile_iter
的numpy
版本,而不是列表解析中的双for循环。我希望它的值与所示的相同,但在相同形状的2D numpy数组中(而不仅仅是用np.array
Package 器转换我的当前数组-我试图避免列表解析)
以下是我目前拥有的最小化,简化版本:
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)]
有没有一种方法可以以numpy友好的方式创建tile_iter
?如果有一个现存的问题反映了这一点,我无法为我的生活找到它(但如果你能,我会很感激)。
1条答案
按热度按时间quhf5bfb1#
一个可能的答案是,做一些与tuple列表非常相似的事情
0,0填充到linspace参数,所以+做了所有的广播可能是我的一些懒惰。在广播时可能会连接2对。
但主要思想是,在
(resolution_x,1,4)
形状的数组和(1,resolution_y,4)
形状的数组之间进行运算(这里是+
)通常(+就是这种情况)使numpy执行resolution_x
和resolution_y
的双重迭代,以计算所有resolution_x*resolution_y
可能的组合。所以,这是numpy迭代双循环的方法。(也就是说,永远不要让for
循环变白,而是让numpy在内部执行)使用更新的数据,并将计算拆分为多行