genelinde sözlük değerlerini kullanarak çarpınpandalar aşağıdaki dataframe Verilen birkaç sütun
a b c d output
0 1 5 3 3 24.1
1 2 4 2 2 21.4
2 3 3 4 1 22.6
3 4 3 3 1 23.8
4 5 4 10 1 38.4
:
params = {'a': 2.5, 'b': 3.0, 'c': 1.3, 'd': 0.9}
aşağıdaki istenen çıktıyı üretin Bu sonucu üretmek için kullanıyorum:
df['output'] = [np.sum(params[col] * df.loc[idx, col] for col in df)
for idx in df.index]
Ancak, bu çok yavaş bir yaklaşım ve ben yerleşik pandalar işlevselliğini kullanarak daha iyi bir yolu olması gerektiğini düşünüyorum.
# Line up the parameters
col_sort_key = list(df)
params_sorted = sorted(params.items(), key=lambda k: col_sort_key.index(k[0]))
# Repeat the parameters *n* number of times
values = [v for k, v in params_sorted]
values = np.array([values] * df.shape[0])
values
array([[ 2.5, 3. , 1.3, 0.9],
[ 2.5, 3. , 1.3, 0.9],
[ 2.5, 3. , 1.3, 0.9],
[ 2.5, 3. , 1.3, 0.9],
[ 2.5, 3. , 1.3, 0.9]])
# Multiply and add
product = df[col_sort_key].values * values
product
array([[ 2.5, 15. , 3.9, 2.7],
[ 5. , 12. , 2.6, 1.8],
[ 7.5, 9. , 5.2, 0.9],
[ 10. , 9. , 3.9, 0.9],
[ 12.5, 12. , 13. , 0.9]])
np.sum(product, axis=1)
array([ 24.1, 21.4, 22.6, 23.8, 38.4])
Ama bu biraz dolambaçlı görünüyor:
Ben de bu düşünce! Yerel pandalar hakkında herhangi bir düşünce deniyor?
Noktalar
dot
kullanabilirsiniz onun varlık sona erdi hızlı benim asıl kullanım örneği için. Eski yaklaşımım bu yeni olandan 65 kat daha yavaştı. Herkese teşekkürler. – blacksiteNümerik olarak matris vektör çarpımı hakkında ne dersiniz? Bu, aşağıdaki gibi bir sonuçla sonuçlanır: np.matmul (df.as_matrix(), np.array (2.5, 3.0, 1.3, 0.9)) –