【发布时间】:2018-06-10 18:16:47
【问题描述】:
我正在尝试映射 2D numpy 数组的值,即(有效地)迭代行并根据行索引附加值。
我尝试过的一种方法是:
source = misc.imread(fname) # Load some image
img = np.array(source, dtype=np.float64) / 255 # Cast and normalize values
w, h, d = tuple(img.shape) # Get dimensions
img = np.reshape(img, (w * h, d)) # Flatten 3D to 2D
# The actual problem:
# Map (R, G, B) pixels to (R, G, B, X, Y) to preserve position
img_data = ((px[0], px[1], px[2], idx % w, int(idx // w)) for idx, px in enumerate(img))
img_data = np.fromiter(img_data, dtype=tuple) # Get back to np.array
但解决方案提出:ValueError: cannot create object arrays from iterator
谁能建议如何在numpy 中有效地执行这个荒谬的简单操作?我不知道这个库有多么复杂......以及为什么该代码会为 7000x5000 像素消耗几 GB 的内存?
谢谢
【问题讨论】:
-
您为什么不生成您想要的任何内容的列表,然后使用
np.array(img_data)简单地将所有内容转换为np array?
标签: python arrays numpy dictionary iteration