简单的迭代数组错误Python

时间:2016-11-10 05:19:53

标签: python arrays numpy indexing iteration

此代码尝试使用两个简单的数组并将它们应用于函数,并将结果吐出到新数组中。我已经尝试了Stack的几个不同的修复,似乎没有任何帮助。代码给出"索引15超出轴0的大小为4"错误。值得注意的是,这是我的第一个Python代码,所以我有点挣扎。我更习惯Java。我假设它有一个简单的错误,但是我还没有在Stack上找到解决方案。

import math
import numpy as np

aVec = np.array ([3.14, 15, 9, 26]);
bVec = np.array ([[2.71], [8], [28], [182]]);

lengthaVec = len(aVec);
yVec = [lengthaVec]
i = 0;
for i in aVec:
   yVec.append (math.sqrt(math.pow(np.transpose((aVec[i])), 2) +             math.pow(bVec[i], 2)));

print yVec

2 个答案:

答案 0 :(得分:0)

看看我在迭代 $("#<%=txtChqDate.ClientID %>").datepicker("option", "dateFormat", "dd-M-yy"); 时得到的结果 - 来自该数组的值,而不是索引。

aVec

错误中的15来自此迭代,并尝试将该值用作索引In [607]: for i in aVec: ...: print(i) ...: 3.14 15.0 9.0 26.0

aVec[15]

将迭代器更改为"index 15 is out of bounds for axis 0 with size 4" ,因此连续值为0,1,2,3

range...

还有其他迭代方法,也可能是在没有迭代的情况下进行计算(参见下面的编辑)

for i in range(aVec.shape[0]): print(math.sqrt(math.pow(np.transpose((aVec[i])), 2) +math.pow(bVec[i], 2))); 4.147734321289154 17.0 29.410882339705484 183.84776310850236 非常适合协调迭代:

zip

但如果for a,b in zip(aVec, bVec): print(math.sqrt(math.pow(np.transpose((a)), 2) +math.pow(b, 2))); . 是1值,则转置毫无意义。所以我们可以放弃它。

我们可以使用:

删除迭代(或将其移动到已编译的代码)
a

我必须使用In [619]: np.sqrt(aVec**2+bVec.T**2) Out[619]: array([[ 4.14773432, 17. , 29.41088234, 183.84776311]]) (转置),因为您将其定义为(4,1)数组,而bVec.T具有形状(4,)。只是做

aVec

产生一组(4,4)值 - '外'和。在某些情况下很好,但可能不是你想要的。

另一种方法 - 将两者加入到二维数组中,对所有元素求和,求和和sqrt:

aVec**2 + bVec**2

np.sqrt((np.array((aVec, bVec.ravel()))**2).sum(0)) np.linalg.norm(np.array((aVec, bVec.ravel())),axis=0) 是另一种让ravel() 1d像bVec一样的方式。

答案 1 :(得分:0)

在python中,迭代器通常使用range功能。你猜测你的代码可以简单地纠正是正确的。查看您的for循环:

i = 0
for i in aVec:

变得简单:

for index in range(1,len(aVec):
    yVec.append (math.sqrt(math.pow(np.transpose((aVec[index])), 2)+ math.pow(bVec[index], 2)));

这里我们已经将循环正确地分配给数组的长度。