【问题标题】:Index Error: too many indices for array While defining variable索引错误:定义变量时数组索引过多
【发布时间】:2015-12-26 08:52:25
【问题描述】:

我收到了这条消息:

---------------------------------------------------------------------------
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,,,

我做错了什么,是什么原因造成的,我该如何解决?

【问题讨论】:

  • 不应该men_only_stats使用=="male"吗?
  • 在我拥有的数据集中,只有“男”和“女”两类。如果我输入 != "female" 那么 python 将获取性别索引不是女性的数据。但是将其切换为男性可以完成同样的事情。
  • 看起来你的两个变量都包含女性。 != "male"== "female" 是一回事,不是吗?
  • 哎呀。感谢您的帮助!嗯,刚刚尝试切换变量并设置 men_only_stats= data[0::4] =="male" 但我仍然收到 indeces 错误。
  • women_only_stats,1 中的1 应该是什么?只获取第一列?

标签: python numpy indexing ipython-notebook


【解决方案1】:

最有可能的是,当您使用 bool 数组(用于索引)时的问题 -

women_only_stats= data[0::4]=="female"

我相信data 是一个二维数组,因此data[0::4] 从数组中获取每第 4 行(不是第 4 列),然后您尝试将其与字符串值进行比较,因此您得到一个 2D真/假值数组。这会导致问题。

其实你想做的是-

women_only_stats = data[:,4]=="female"

men_only_stats 也是如此,您也应该重新考虑使用过 [0::4] 的任何地方,这意味着该维度中的每个第 4 个元素。

另外,最后我想建议,对于这种 csv/data 操作,使用 pandas 库比使用 numpy 容易得多。

【讨论】:

    【解决方案2】:

    当您尝试像访问 2d 一样访问 1d 数组或像 3d 一样访问 2d 数组等时会发生错误 IndexError: too many indices for array

    在这种情况下,您正在访问data,一个一维数组。抛出错误的行:

    women_onboard = data[women_only_stats,1].astype(np.float)
    

    ...使用语法array_var[x,y],只能用于2d+ 数组。该语法意味着您正在访问行 x 和列 y 处的元素,因此它不适用于只有一行(或者如果您这样认为只有一列)的数组。

    如果您搜索该错误消息,您会得到很多人提出类似问题的结果,例如hereherehere

    【讨论】:

      猜你喜欢
      • 2012-12-08
      • 2015-09-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-12-05
      • 1970-01-01
      • 2021-07-20
      相关资源
      最近更新 更多