gpt4 book ai didi

python - 像 GIMP/Photoshop Canvas 一样转换 numpy 二维数组

转载 作者:行者123 更新时间:2023-12-01 03:31:08 24 4
gpt4 key购买 nike

我有一个 3D numpy 数组,我像使用多层的 2D 数组一样威胁它。在下面的示例中,我有 2 层 2d 数组,宽度为 4,高度为 3。

import numpy
mapTiles=numpy.array(([[1,1,1,1],
[1,1,1,1],
[1,1,1,1]],
[[2,0,2,2],
[0,0,2,2],
[0,0,0,2]]))

我需要以与 Gimp/Photoshop/Aseprite Canvas 类似的方式转换这个 numpy 数组。因此使用高度、宽度以及垂直和水平偏移值。

  • 如果生成的数组较大,请保持维度顶部/左侧对齐并用零填充。

  • 如果结果数组较小,则直接剪切。

  • 如果偏移超出宽度和高度限制,则直接剪切。用零填充空格。

我只能用很多 if 条件来设想这一点,下面只是其中一种可能的情况。有没有专门为此制定的方法?要创建新数组并复制,是否有其他方法可以仅使用 for

mapResize(mapTiles, width,height,offsetx=0,offsety=0):
if(width-offsetx < len(mapTiles[0][0]) and height-offsety < len(mapTiles[0])):
x=min(max(offsetx,0),len(mapTiles[0][0]))
y=min(max(offsety,0),len(mapTiles[0]))
return mapTiles[:,y:(y+height),x:(x+width)]

最佳答案

我认为这样做可以(下次尝试显示预期输出):

def mapResize(m, w, h, xo, yo):
pads=((0,0),(abs(yo),abs(yo)+h),(abs(xo),abs(xo)+w))
bigMap=np.lib.pad(m,pads,'constant',constant_values=0)
return bigMap[:,yo+abs(yo):yo+abs(yo)+h,xo+abs(xo):xo+abs(xo)+w]

mapResize(mapTiles,3,5,1,-2)
array([[[0, 0, 0],
[0, 0, 0],
[1, 1, 1],
[1, 1, 1],
[1, 1, 1]],

[[0, 0, 0],
[0, 0, 0],
[0, 2, 2],
[0, 2, 2],
[0, 0, 2]]])

基本上,制作一个大的填充数组并将其切片到适当的大小。

关于python - 像 GIMP/Photoshop Canvas 一样转换 numpy 二维数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40923247/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com