You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用Python的NumPy将图像数组拆分为每个含16字节的子数组?

解决数组拆分:每个子数组包含16字节而非拆分为16个数组

我明白你的问题了——你想要的是把从图像提取的数组拆成每个包含16字节的子数组,而不是把原数组分成16个部分对吧?你之前用np.array_split(i, 16)的问题在于,这个函数的第二个参数是「拆分的份数」,而不是「每个子数组的大小」,所以才会得到16个数组,和你的需求刚好相反。

下面根据两种常见的需求场景给出解决方案:


场景1:将整个图像数组全局拆分为16字节的子数组

如果希望无视原数组的行列结构,把所有元素连续拆成多个16元素的子数组(假设每个元素是1字节,比如单通道8位图像),可以这样做:

from PIL import Image
import numpy as np

img = Image.open("images.tif")
img_array = np.array(img)

# 先将二维数组展平为一维
flattened_array = img_array.flatten()

# 计算能完整拆分为16字节子数组的元素总数(丢弃不足16字节的剩余部分)
total_valid_elements = (len(flattened_array) // 16) * 16
trimmed_array = flattened_array[:total_valid_elements]

# 拆分为每行16元素的二维数组(每个行就是一个16字节的子数组)
split_arrays = trimmed_array.reshape(-1, 16)

# 遍历输出每个16字节子数组
for sub_arr in split_arrays:
    print(sub_arr)

场景2:按行拆分,每行拆分为多个16字节的子数组

如果希望保留原数组的行结构,将每一行都拆成若干个16字节的子数组,可以这样修改你的代码:

from PIL import Image
import numpy as np

img = Image.open("images.tif")
img_array = np.array(img)

for row in img_array:
    # 修剪当前行,只保留能被16整除的元素数量
    trimmed_row = row[:len(row) // 16 * 16]
    # 将行拆分为多个16元素的子数组
    row_subarrays = trimmed_row.reshape(-1, 16)
    # 输出当前行的所有16字节子数组
    print(row_subarrays)

关键说明

  • reshape(-1, 16)中的-1表示让NumPy自动计算拆分后的子数组数量,这样就能保证每个子数组恰好包含16个元素(也就是16字节,当元素为单字节类型时)。
  • 如果需要保留不足16字节的剩余元素,可以单独处理flattened_array[total_valid_elements:](全局拆分场景)或者row[len(row)//16 *16:](按行拆分场景)。

内容的提问来源于stack exchange,提问作者DTOP

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.09 17:52:51