numpy 数组各元素与各元素相乘的向量化解法

qnyhuwrf  于 2023-05-17  发布在  其他
关注(0)|答案(2)|浏览(105)

我想把数组中的所有元素相乘,得到一个df,第一列是a1a1,a1a2,a1a3...,第二列是a2a1,a2*a2等。我想要一个矢量化的解决方案到目前为止,我所拥有的是半矢量化的,我不知道如何摆脱这里的循环,并将感谢任何提示!

data = {'values': [0.7, 0.1, 0.5, 0.7]}
df = pd.DataFrame.from_dict(data)

products = []
for i in df.index:
    products.append([np.multiply(item,df.loc[i, 'values']) for item in df['values']])
products = pd.DataFrame(products)
vlf7wbxs

vlf7wbxs1#

使用numpybroadcasting

a = df['values'].to_numpy()

out = pd.DataFrame(a[:,None]*a)

numpy.outer

out = pd.DataFrame(np.outer(df['values'], df['values']))

输出:

0     1     2     3
0  0.49  0.07  0.35  0.49
1  0.07  0.01  0.05  0.07
2  0.35  0.05  0.25  0.35
3  0.49  0.07  0.35  0.49
1wnzp6jl

1wnzp6jl2#

使用numpy broadcasting

a = df['values'].to_numpy()
products = pd.DataFrame(a * a[:, None])
print (products)
      0     1     2     3
0  0.49  0.07  0.35  0.49
1  0.07  0.01  0.05  0.07
2  0.35  0.05  0.25  0.35
3  0.49  0.07  0.35  0.49

相关问题