Index Error: too many indices for array While defining variable
Index Error: too many indices for array While defining variable
我收到了这条消息:
---------------------------------------------------------------------------
IndexError Traceback (most recent call last)
<ipython-input-23-60bbe78150c2> in <module>()
17 men_only_stats=data[0::4]!="male"
18
---> 19 women_onboard = data[women_only_stats,1].astype(np.float)
20 men_onboard = data[men_only_stats,1].astype(np.float)
21 proportion_women_survive= sum(women_onboard)/size(women_onboard)
IndexError: too many indices for array
当我在这里输入我的代码时:
import csv as csv
import numpy as np
csv_file_object = csv.reader(open(r"C:\Users\IT'S OVER 9000\Downloads\train.csv", 'rb'))
header = csv_file_object.next()
data=[]
for row in csv_file_object:
data.append(row)
data=np.array(data)
number_passengers= np.size(data[0::4,1].astype(np.float))
passengers_survived=np.sum(data[0::4,1].astype(np.float))
proportion_survived=passengers_survived/number_passengers
women_only_stats= data[0::4]=="female"
men_only_stats=data[0::4]!="male"
women_onboard = data[women_only_stats,1].astype(np.float)
men_onboard = data[men_only_stats,1].astype(np.float)
proportion_women_survive= sum(women_onboard)/size(women_onboard)
proportion_men_survive= sum(men_onboard)/size(men_onboard)
print proportion_women_survive
print proportion_men_survive
这是我的 cvs 文件中的两行数据:
PassengerId,Survived,Pclass,Name,Sex,Age,SibSp,Parch,Ticket,Fare,Cabin,Embarked,,,,
1,0,3,"Braund, Mr. Owen Harris",male,22,1,0,A/5,21171,7.25,,S,,,
2,1,1,"Cumings, Mrs. John Bradley (Florence Briggs Thayer)",female,38,1,0,PC,17599,71.2833,C85,C,,,
我做错了什么,是什么原因造成的,我该如何解决?
最有可能的是,当您使用 bool 数组(用于索引)时出现的问题 -
women_only_stats= data[0::4]=="female"
我相信 data
是一个二维数组,因此 data[0::4]
从数组中取出每 4 行(而不是第 4 列),然后您尝试将其与字符串值进行比较,因此你会得到一个 True/False 值的二维数组。这导致了问题。
实际上你想做的是 -
women_only_stats = data[:,4]=="female"
与 men_only_stats
相同,您还应该重新考虑使用 [0::4]
的所有地方,这意味着该维度的每第 4 个元素。
此外,最后我想建议对于这种 csv/data 操作,使用 pandas 库比使用 numpy 容易得多。
错误 IndexError: too many indices for array
当您尝试像访问 2d 数组一样访问 1d 数组,或像访问 3d 数组一样访问 2d 数组等时发生
在这种情况下,您正在访问 data
,一个一维数组。抛出错误的行:
women_onboard = data[women_only_stats,1].astype(np.float)
...正在使用语法 array_var[x,y]
,它只能用于 2d+ 数组。该语法意味着您正在访问行 x
和列 y
处的元素,因此它不适用于只有一行(或者只有一列,如果您这样想的话)的数组.
如果您搜索该错误消息,您会得到很多询问类似问题的人的结果,例如 , here, and here。
我收到了这条消息:
---------------------------------------------------------------------------
IndexError Traceback (most recent call last)
<ipython-input-23-60bbe78150c2> in <module>()
17 men_only_stats=data[0::4]!="male"
18
---> 19 women_onboard = data[women_only_stats,1].astype(np.float)
20 men_onboard = data[men_only_stats,1].astype(np.float)
21 proportion_women_survive= sum(women_onboard)/size(women_onboard)
IndexError: too many indices for array
当我在这里输入我的代码时:
import csv as csv
import numpy as np
csv_file_object = csv.reader(open(r"C:\Users\IT'S OVER 9000\Downloads\train.csv", 'rb'))
header = csv_file_object.next()
data=[]
for row in csv_file_object:
data.append(row)
data=np.array(data)
number_passengers= np.size(data[0::4,1].astype(np.float))
passengers_survived=np.sum(data[0::4,1].astype(np.float))
proportion_survived=passengers_survived/number_passengers
women_only_stats= data[0::4]=="female"
men_only_stats=data[0::4]!="male"
women_onboard = data[women_only_stats,1].astype(np.float)
men_onboard = data[men_only_stats,1].astype(np.float)
proportion_women_survive= sum(women_onboard)/size(women_onboard)
proportion_men_survive= sum(men_onboard)/size(men_onboard)
print proportion_women_survive
print proportion_men_survive
这是我的 cvs 文件中的两行数据:
PassengerId,Survived,Pclass,Name,Sex,Age,SibSp,Parch,Ticket,Fare,Cabin,Embarked,,,,
1,0,3,"Braund, Mr. Owen Harris",male,22,1,0,A/5,21171,7.25,,S,,,
2,1,1,"Cumings, Mrs. John Bradley (Florence Briggs Thayer)",female,38,1,0,PC,17599,71.2833,C85,C,,,
我做错了什么,是什么原因造成的,我该如何解决?
最有可能的是,当您使用 bool 数组(用于索引)时出现的问题 -
women_only_stats= data[0::4]=="female"
我相信 data
是一个二维数组,因此 data[0::4]
从数组中取出每 4 行(而不是第 4 列),然后您尝试将其与字符串值进行比较,因此你会得到一个 True/False 值的二维数组。这导致了问题。
实际上你想做的是 -
women_only_stats = data[:,4]=="female"
与 men_only_stats
相同,您还应该重新考虑使用 [0::4]
的所有地方,这意味着该维度的每第 4 个元素。
此外,最后我想建议对于这种 csv/data 操作,使用 pandas 库比使用 numpy 容易得多。
错误 IndexError: too many indices for array
当您尝试像访问 2d 数组一样访问 1d 数组,或像访问 3d 数组一样访问 2d 数组等时发生
在这种情况下,您正在访问 data
,一个一维数组。抛出错误的行:
women_onboard = data[women_only_stats,1].astype(np.float)
...正在使用语法 array_var[x,y]
,它只能用于 2d+ 数组。该语法意味着您正在访问行 x
和列 y
处的元素,因此它不适用于只有一行(或者只有一列,如果您这样想的话)的数组.
如果您搜索该错误消息,您会得到很多询问类似问题的人的结果,例如