IndexError: too many indices for array: array is 1-dimensional, but 2 were indexed

运行代码发现了IndexError: too many indices for array: array is 1-dimensional, but 2 were indexed这个报错,

 后来去百度发现是这段代码出了问题

tp, fp, precision_all, strResults, f1_all, acc_all, mcc_all = calculate_performance(y_val, y_predict_cv, 'val')

因为定义的calculate_performance里面要求的数据是有两个索引,但是这些数据是一维的,所以才会报这个错误。后来学习发现了.reshape这个用法改变数组的形状。reshape(-1,1)是将一维数据在行上变化,而reshape(1,-1)是将一维数据在列上变化。这里-1是指未设定行数,程序随机分配,所以这里-1表示任一正整数,所以reshape(-1,1)表示(任意行,1列)

下面举个具体的例子:

import numpy as np
a=np.array([[1,2,3],[4,5,6]]) #定义一个两行三列的数组
print(a)
b=a.reshape(-1,1)    #将a数组改编为一行任意列的数组
print(b)
c=a.reshape(1,-1)   #将a数组改编为任意行一列的数组
print(c)

输出的对应结果为

[[1 2 3]
 [4 5 6]]
[[1]
 [2]
 [3]
 [4]
 [5]
 [6]]
[[1 2 3 4 5 6]]

以上方法完美的解决了这个错误,所以当我们遇到需要改变数组的形状时,可以巧妙的去运用reshape去改变数组的形状来解决这个问题。

你可能感兴趣的:(算法,python)