Python Numpy阵列特定操作

Python Numpy阵列特定操作,python,Python,我有一个512个tiff图像的numpy数组。我需要每次选择4个图像来对其进行一些计算。然后选择接下来的4个图像并执行相同的操作,依此类推……只需重塑阵列,然后使用切片一次获得4个图像: new_array = array.reshape(4, 128) for i in range(128): batch_of_pictures = new_array[:, i] # or maybe the reverse 注意,这没有经过测试,可能会导致错误。基本的想法是健全的,但你可以参考或留

我有一个512个tiff图像的numpy数组。我需要每次选择4个图像来对其进行一些计算。然后选择接下来的4个图像并执行相同的操作,依此类推……

只需重塑阵列,然后使用切片一次获得4个图像:

new_array = array.reshape(4, 128)
for i in range(128):
    batch_of_pictures = new_array[:, i] # or maybe the reverse
注意,这没有经过测试,可能会导致错误。基本的想法是健全的,但你可以参考或留下评论,如果你卡住了

由于您实际拥有的数组大小与我想象的不同,请尝试:

for i in range(0, 128, 4):
    batch_of_pictures = your_array[:,:,i:i+4]

再说一次,我没有测试它,但它应该做得很好!您的问题只是索引,因此将i:i+3移动到任何位置都可以生成正确的图片数组,假设图像沿着数组的轴0枚举
img

N = 512 # the total number of images in img
for i in range(0, N, 4):
  img4 = img[i:i+4, :, :]       # img4 is now an array[4, 512, 512] of 4 images
  varImg = np.var(img4, axis=0) # computes the variance in img4, pixel-wise

另外,请参见。

一个Numpy阵列有512个图像?这些是彩色图像吗?因为在R,G,B元素是不同的?谢谢,但实际上数组的大小不是512,它是(512*512*512)512图像,每个都是512*512像素,数组表示像素强度值
i:i+3
不起作用,因为Python(与R不同)不包括最后一个索引。它应该是
i:i+4
。非常感谢你。你能告诉我如何创建一个计数器并将其输入函数,以便对每个img4进行相同的计算。我不确定我是否理解这个问题。如果“计数器”的意思是
N
,我已经编辑了答案并将其设置为512。它是阵列中的图像数。您可以使用Python中的
def
关键字定义函数,例如
operate(x)
,并将其作为参数传递给
img4
。如果你需要更详细的答案,你的问题必须更具体。简单地说:现在我得到了正确的数组,这个数组中的每个元素代表4个图像:现在我想做np.var(数组[0]),它正在计算前4个图像的方差,并希望将其保存为图像。之后,对第二个4个图像执行相同的功能,以此类推。。。。你明白我的意思吗?我想做一个从0到127的计数器,代表前4个图像和第二个图像,依此类推。。并将其输入函数,以计算文章中每4幅图像的方差。您的“计数器”是
i
,它在4步中从0变为511。如果需要它在0:127范围内(例如用于创建文件名),只需将其除以4即可。