首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >调整具有大量维数的numpy数组的大小

调整具有大量维数的numpy数组的大小
EN

Stack Overflow用户
提问于 2020-08-05 23:25:31
回答 1查看 49关注 0票数 1

我使用的是Python 3.7.7。我正在尝试用这个函数调整一个Numpy图像数组的大小:

代码语言:javascript
运行
复制
def resize_image_array(image_array, rows_standard, cols_standard):

    # image_array.shape = (3929, 2, 256, 256, 1)
    # rows_standard = 200
    # cols_standard = 200

    # Height or row number.
    image_rows_Dataset = np.shape(image_array)[2]
    # Width or column number.
    image_cols_Dataset = np.shape(image_array)[3]

    num_rows_1 = ((image_rows_Dataset // 2) - (rows_standard / 2)) # num_rows_1 = 28.0
    num_rows_2 = ((image_rows_Dataset // 2) + (rows_standard / 2)) # num_rows_2 = 228.0
    num_cols_1 = ((image_cols_Dataset // 2) - (cols_standard / 2)) # num_cols_1 = 28.0
    num_cols_2 = ((image_cols_Dataset // 2) + (cols_standard / 2)) # num_cols_2 = 228.0

    return image_array[..., num_rows_1:num_rows_2, num_cols_1:num_cols_2, :]

但在最后一条语句中,我得到了这个错误:

代码语言:javascript
运行
复制
TypeError: slice indices must be integers or None or have an __index__ method

我也尝试过:

代码语言:javascript
运行
复制
return image_array[:, :, num_rows_1:num_rows_2, num_cols_1:num_cols_2, :]

但具有与上面所示相同的错误。

如何修复此错误?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-08-06 04:06:39

正如评论中提到的,问题是在普通python标量上使用真除(/)会返回一个float,即使两个操作数都是整数。运算符在执行除法之前不检查整数的整除性。float没有__index__方法,该方法将类整型的量转换为实际的int

简单的解决方案是用//替换/。然而,num_rows_2num_cols_2的计算似乎是多余的。如果您知道所需的rows_standardcols_standard的值,只需将它们分别添加到num_rows_1num_cols_1。这将产生一个更加健壮的表达式:

代码语言:javascript
运行
复制
row_start = (image_array.shape[2] - rows_standard) // 2
row_end = row_start + rows_standard
col_start = (image_array.shape[3] - cols_standard) // 2
col_end = col_start + cols_standard
image_array[..., row_start:row_end, col_start:col_end, :]
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/63268428

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档