我使用的是Python 3.7.7。我正在尝试用这个函数调整一个Numpy图像数组的大小:
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, :]但在最后一条语句中,我得到了这个错误:
TypeError: slice indices must be integers or None or have an __index__ method我也尝试过:
return image_array[:, :, num_rows_1:num_rows_2, num_cols_1:num_cols_2, :]但具有与上面所示相同的错误。
如何修复此错误?
发布于 2020-08-06 04:06:39
正如评论中提到的,问题是在普通python标量上使用真除(/)会返回一个float,即使两个操作数都是整数。运算符在执行除法之前不检查整数的整除性。float没有__index__方法,该方法将类整型的量转换为实际的int。
简单的解决方案是用//替换/。然而,num_rows_2和num_cols_2的计算似乎是多余的。如果您知道所需的rows_standard和cols_standard的值,只需将它们分别添加到num_rows_1和num_cols_1。这将产生一个更加健壮的表达式:
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, :]https://stackoverflow.com/questions/63268428
复制相似问题