在Python中使用for在列表中追加float
我试图构建一个函数,将每个向量的iten相乘,然后返回一个带有这些数字的向量,但是我在附加乘法时遇到了问题 例如: -输入:在Python中使用for在列表中追加float,python,list,append,Python,List,Append,我试图构建一个函数,将每个向量的iten相乘,然后返回一个带有这些数字的向量,但是我在附加乘法时遇到了问题 例如: -输入: vec1 = np.array([-2.0, -1.0, 0.0, 1.0, 2.0]) vec2 = np.array([-16.2, 87.8, -7.199999999999999, -52.2, -12.2]) list_mult(vec1,vec2) -输出: [ 32.4 -87.8 -0. -52.2 -24.4] -以下是我的代码和输出错误:
vec1 = np.array([-2.0, -1.0, 0.0, 1.0, 2.0])
vec2 = np.array([-16.2, 87.8, -7.199999999999999, -52.2, -12.2])
list_mult(vec1,vec2)
-输出:
[ 32.4 -87.8 -0. -52.2 -24.4]
-以下是我的代码和输出错误:
import numpy as np
def list_mult(v1,v2):
result = list()
for i in v1:
for j in v2:
result.append(v1[i] * v2[j])
return result
输出:
4 for i in v1:
5 for j in v2:
----> 6 result.append(v1[i] * v2[j])
7 return result
TypeError: list indices must be integers or slices, not numpy.float64
```
您正在迭代元素,但在访问时,您正在将元素作为索引传递。所以你得到了错误 更改以下行
In [38]: import numpy as np
...:
...: def list_mult(v1,v2):
...: result = list()
...: for idx1,i in enumerate(v1):
...: for idx2,j in enumerate(v2):
...: if (idx1 == idx2):
...: result.append(i * j)
...: return result
...:
...:
In [39]: list_mult(vec1,vec2)
Out[39]: [32.4, -87.8, -0.0, -52.2, -24.4]
更优雅的解决方案是使用numpy包的np.multiply
函数
In [37]: np.multiply(vec1,vec2)
Out[37]: array([ 32.4, -87.8, -0. , -52.2, -24.4])
这里的
i
和j
是v1[i]
,我的意思是i
和j
不是索引,而是它们本身的数字(-16.2,87.8,-7.19999999999999999,-52.2,-12.2),所以你需要结果。只附加(i*j)
np乘法(vec1,vec2)[i*j在v1中表示i在v2中表示j在v2中表示j]
你使用的是numpy,它具有内置的功能。您可以简单地执行vec1*vec2
,这将执行元素乘法。最初犯了同样的错误,嵌套循环将生成16个值,而不是像OP所需的4个值:)当我使用第一个循环时,它将返回以下列表:[32.4, -175.6, 14.399999999999999, 104.4, 24.4, 16.2, -87.8, 7.199999999999999, 52.2, 12.2, -0.0, 0.0, -0.0, -0.0, -0.0, -16.2, 87.8, -7.199999999999999, -52.2, -12.2, -32.4, 175.6, -14.399999999999999, -104.4, -24.4]因为它是两个列表的叉积。更新了答案,但建议使用numpy软件包的多功能,因为它更优化。