首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >np.where IndexError异常

np.where IndexError异常
EN

Stack Overflow用户
提问于 2018-05-03 03:11:04
回答 2查看 412关注 0票数 0

我有一个非常简单的代码如下:

代码语言:javascript
复制
import numpy as np
num_classes = 12
im_pred = np.random.randint(0, num_classes, (224, 244))
img = np.zeros((224, 224, 3))
print(im_pred.shape)
#(224, 244)
print(img.shape)
#(224, 224, 3)
for i in range(num_classes):
    img[np.where(im_pred==i), :] = [225, 0, 0]

回溯(最近一次调用): 文件"",第2行,在 IndexError:对于大小为224的0轴,索引227超出了界限

代码语言:javascript
复制
x, y = np.where(im_pred==i)
print(np.max(x), np.max(y))
#223 243

为什么我要拿到IndexError?就我对np.where的理解而言,返回的索引值应该小于224

让我知道。我开始怀疑numpy安装是否有问题。

谢谢。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2018-05-03 03:27:20

问题是,您已经制作了不同大小的imgimg_pred

代码语言:javascript
复制
im_pred.shape == (224, 244)

代码语言:javascript
复制
img.shape == (224, 224, 3)

第二轴有不同的大小。

但是一旦解决了这个问题,就会有一个简单的优化。这里不需要np.where。只需使用直接逻辑索引:

代码语言:javascript
复制
for i in range(num_classes):
    img[im_pred == i, 0] = 255

注意,我还保留了两个零,因为在构造时使用零初始化数组。

票数 1
EN

Stack Overflow用户

发布于 2018-05-03 03:27:08

不,Numpy不是马车。看看您如何定义im_pred,您正在为大小为224×244的数组绘制一个介于0到11之间的随机整数。因此,它抛出一个错误的原因是244的尺寸对于变量img来说太大了,img只有224乘224乘3。我想你可能是想让两者都有相同的第1维和第2维,就像

代码语言:javascript
复制
img = np.zeros((224,244,3)) 
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/50146362

复制
相关文章

相似问题

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