如何遍历numpy矩阵?遍历行时提示索引类型错误该怎么解决
错误原因
你写for i in X时,迭代得到的i是矩阵每一行的元素组成的浮点类型一维数组,不是行对应的整数索引。将浮点数组作为下标访问X[i],就会触发IndexError: arrays used as indices must be of integer (or boolean) type报错。
解决方法
有两种可行的写法,按需选择即可:
方法1:遍历行索引
如果你确实需要通过索引访问行,循环改为遍历整数索引范围:
loglike = [] # i为0到矩阵行数-1的整数索引 for i in range(len(X_test)): p = np.sum(np.multiply(X[i], np.log(posprob)) + np.multiply((1-X[i]), np.log(1-posprob))) loglike.append(p) print(loglike)
对应的打印循环修改为:
for i in range(len(X)): print(X[i])
方法2:直接使用迭代得到的行对象
既然直接迭代矩阵已经能拿到每一行的内容,不需要再通过索引二次取值:
loglike = [] # 直接用迭代得到的行对象参与计算 for row in X_test: p = np.sum(np.multiply(row, np.log(posprob)) + np.multiply((1-row), np.log(1-posprob))) loglike.append(p) print(loglike)
对应的打印循环修改为:
for row in X: print(row)
补充说明
你看到的其他同类问题的写法,大概率是循环遍历的是range(len(矩阵))的索引范围,或是迭代的对象本身就是提前整理好的整数索引数组,和你直接迭代矩阵的写法逻辑并不一致。
内容的提问来源于stack exchange,提问作者Conweezy
相关产品推荐
相关产品推荐

