我有一个 4d numpy 数组,我想对它的几个切片执行计算,然后创建一个包含所有值的新数组。主要问题是我有 3 维的固定切片,但是第四轴的几个范围如何请按第 4 轴上的范围切片
问问题
33 次
1 回答
1
虽然我认为这里已经有几个类似的问题(38 个结果numpy 4d slice
),但这是我试图从视觉上解释这一点的尝试。首先,我.gif
从 Giphy 下载了一个并将其转换为示例性的多维np.array()
;它的大小为 200x200px,有 3 个颜色通道,6 个帧,形状为(6, 200, 200, 3)
.
在绘图的第一行中,我分别显示了每个颜色通道,以及带有索引的帧的总和1
(注意cmap
这里忽略了关键字)。
接下来,我创建了一个特定的绿色通道切片(颜色索引1
),它在 y 方向上从 50-150px 到 x 方向上 100-120px,如下所示:my_slice= frames[frame_index,50:150,100:120,1]
- 它有 shape (100, 20)
。我将它乘以 0.1,然后将结果插入原始位置。
第二个图像行现在显示了我如何减少该区域中的绿色通道,从而在整个图像中产生整体的粉红色色调。
如果你现在想在例如 frames 上执行这个动作[0,4,5]
,它就变成了一个简单的for frame_index in [0,4,5]:
循环。希望这可以帮助。
import numpy as np
import matplotlib.pyplot as plt
from PIL import Image, ImageSequence
## downloaded from here:
# https://media.giphy.com/media/uQCxA7u9CEdIA/200w_d.gif
img = Image.open("/path/to/Downloads/brainscan.gif")
frames = np.array([np.array(frame.copy().convert('RGB').getdata(),dtype=np.uint8).reshape(frame.size[1],frame.size[0],3) for frame in ImageSequence.Iterator(img)])
print(np.shape(frames))
frame_index=1
fig,axes=plt.subplots(2,4,figsize=(10,4))
axes[0,0].imshow(frames[frame_index,:,:,0],cmap="Reds_r")
axes[0,1].imshow(frames[frame_index,:,:,1],cmap="Greens_r")
axes[0,2].imshow(frames[frame_index,:,:,2],cmap="Blues_r")
axes[0,3].imshow(frames[frame_index,:,:,:],cmap="viridis")
my_slice= frames[frame_index,50:150,100:120,1]
print(np.shape(my_slice[:]))
frames[frame_index,50:150,100:120,1]=0.1*my_slice
axes[1,0].imshow(frames[frame_index,:,:,0],cmap="Reds_r")
axes[1,1].imshow(frames[frame_index,:,:,1],cmap="Greens_r")
axes[1,2].imshow(frames[frame_index,:,:,2],cmap="Blues_r")
axes[1,3].imshow(frames[frame_index,:,:,:],cmap="viridis")
plt.show()
于 2019-04-15T08:28:51.083 回答