此代码尝试使用两个简单的数组并将它们应用于函数,并将结果吐出到新数组中。我已经尝试了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
答案 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)));
这里我们已经将循环正确地分配给数组的长度。