python - numpy 当切片的每一行具有不同的列数时,如何从二维数组中获取元素?
问题描述
当切片的每一行具有不同的列数时,如何从二维数组中获取元素?
buffer = np.zeros((32, 32, 3), 'u1') # this is our data buffer 2d.
buffer[2:5, (2:4, 3:7, 0:11)] # does not work.
# vertical interval: 2..5; horizontal intervals: 1..3, 4..9, 7..10
multi_intervals = ((2, 5), ((1, 3), (4, 9), (7, 10)))
# our very slowerest function.
def gen_xy_indices(y_interval, x_multi_intervals):
x_multi_ranges = list(map(lambda x: np.arange(*x),x_multi_intervals))
y_range = np.arange(*y_interval)
y_indices = np.repeat(y_range, list(map(len, x_multi_ranges)))
x_indices = np.concatenate(x_multi_ranges)
return x_indices, y_indices
ix, iy = gen_xy_indices(*multi_intervals)
buffer[iy, ix].shape == (10, 3) # yeah work but slow.
# IS THERE A FASTER WAY TO DO THIS?! (in python with numpy)
解决方案
这是您可以做到的一种方法:
x = range(2,5)
y = range(17)
divs = [(2,4), (3,7), (12,17)]
y_vals = []
x_vals = []
for d, div in enumerate(divs):
y_grp = y[div[0]:div[1]]
y_vals += y_grp
x_vals += [x[d]]*len(y_grp)
print(x_vals)
print(y_vals)
> [2, 2, 3, 3, 3, 3, 4, 4, 4, 4, 4]
> [2, 3, 3, 4, 5, 6, 12, 13, 14, 15, 16]
推荐阅读
- css - 如何删除大写文本的第一个单词
- react-native - 如何在反应导航 v5 中将抽屉放在标题上?
- unpivot - 如何在 DolphinDB 中将多列数据转换为一列?
- c++ - 将字符串存储在变量中时如何将字符串转换为 wchar_t?
- java - 添加遇到的警告数量作为 Maven“占位符”
- javascript - Array for-loop: temp 保存 Array[i] 还是继续调用 Array[i] ?哪个更好/更快?
- arrays - 在循环外访问数组
- shell - 从 csv 文件转换日期格式时出现“无效日期”错误消息?-壳
- python - 如何在我的 PyQt5 Qwidget 上显示 matplotlib
- caching - 用于 dotnet lambdas 的 AWS SSM 参数存储的缓存解决方案