索引错误:数组索引太多定义变量时

时间:2015-09-29 01:49:16

标签: python numpy indexing ipython-notebook

我收到了这条消息:

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

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

2 个答案:

答案 0 :(得分:0)

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

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

我相信data是一个2D数组,因此data[0::4]从数组(而不是第4列)获取每第4行,然后你尝试将它与字符串值进行比较,因此你获取一个真/假值的2D数组。这导致了这个问题。

实际上你想做的是 -

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

同样适用于men_only_stats,您也应该重新考虑使用[0::4]的所有地方,这意味着该维度中的每个第4个元素。

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

答案 1 :(得分:0)

当您尝试访问1d数组时发生错误/** Tree node implementation using "last-child-prev-sibling" */ MyTreeNode<E> implements TreeNode<E> { MyTreeNode<E> parent; MyTreeNode<E> lastChild; MyTreeNode<E> prevSibling; // I bet it is add child, which add a new child to the last public void setChild(TreeNode<E> child) { if (! (child instanceof MyTreeNode)) { throw new SomeKindOfImpatibleTypeException(); } MyTreeNode<E> newLastChild = (MyTreeNode<E>) child; newLastChild.parent = this; newLastChild.previousChild = this.lastChild; this.lastChild = newLastChild; } public TreeNode<E> getNextSibling() { if (this.parent == null) { return null; } MyTreeNode<E> n = this.parent.lastChild; if (n == this) { return null; } for ( ; n != null; n = n.prevSibling) { if (n.prevSibling == this) { return n; } } return null; } public TreeNode<E> firstChild() { if (lastChild == null) { return null; } for (TreeNode<E> n = lastNode; n.prevSibling != null; n=n.prevSibling) { } return n; } } ,就像它是2d一样,或者是2d数组,就好像是3d等一样。

在这种情况下,您正在访问一个1d数组IndexError: too many indices for array。抛出错误的一行:

data

...正在使用语法women_onboard = data[women_only_stats,1].astype(np.float) ,它只能用于2d +数组。该语法意味着您正在访问行array_var[x,y]和列x中的元素,因此它不适用于只有一行的数组(如果您这样想的话,它只适用于一列)

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