我正在尝试解决熊猫的问题。我已经为它写了一个循环,但它没有给我想要的结果。
我有一个标量a =[1,2],我有一个向量b =[1,2,3,4]。我想在a和b上执行元素智能乘法-所以a[0]* b, a[1]*b..
df = []
a = [1,2]
b = [1,2,3,4]
for i in a:
for j in b:
test = i * j
df.append(test)
现在在df中我有df = (1,2,3,4,2,3,6,8)
这在技术上是正确的但我想处理一个标量列表来迭代,所以我的结果是
[1,2,3,4][2,4,6,8] - that can be saved in the dataframe df
另一个答案是使用einsum:
np.einsum('i,j->ij',a,b)
useouter
:
np.outer(a, b)
array([[1, 2, 3, 4],
[2, 4, 6, 8]])
可以使用广播将多个列表转换为数组:
out = np.array(a)[:, None] * np.array(b)
print (out)
[[1 2 3 4]
[2 4 6 8]]
您的循环需要另一个追加。更好的是,使用嵌套的列表推导式
res = [[i*j for j in b] for i in a]