我正在嘗試生成一種將向量映射到 numpy 陣列之間的操作的編碼,并且這樣做很有效。
例如,如果我有兩個操作 np.add 和 np.foo,我將 np.add 編碼為 0,將 np.foo 編碼為 1。從向量 np.array([0,1,2 ]) 到 np.add(1,2)
本質上是一種更有效的方法:
operation_list = [np.add, np.foo, np.witchcraft]
# In practice this array will be generated
# automatically
arr_of_ops = np.array([[0,1,2], \ #np.add(1,2)
[1,1,2], \ #np.foo(1,2)
[0,2,2], \ #np.add(2,2)
[3,3,2]]) #np.witchcraft(3,2)
#This is the function I want to implement in an #efficient way as possible
def evaluate_encoding(arr_of_ops):
results = []
for row in arr_of_ops:
if row[0] == 0:
results.append(np.add(row[1],row[2]))
elif row[0] == 1:
results.append(np.foo(row[1],row[2]))
elif row[0] == 2:
results.append(np.witchcraft(row[1],row[2]))
return np.array(results)
uj5u.com熱心網友回復:
一種方法是使用pandaswhich 是相當有效的,因為它也是矢量化的。
您可以將您的資料轉換為資料框并通過操作進行查詢
import numpy as np
import pandas as pd
arr_of_ops = np.array([
[0, 1, 2],
[1, 1, 2],
[0, 2, 2],
[1, 3, 2]
])
df = pd.DataFrame(data=arr_of_ops, columns=("operation", "a", "b"))
indices_sum = df.operation.eq(0)
indices_diff = df.operation.eq(1)
df["results"] = None
df.results[indices_sum] = df.a[indices_sum] df.b[indices_sum]
df.results[indices_diff] = df.a[indices_diff] - df.b[indices_diff]
print(df)
# operation a b results
# 0 0 1 2 3.0
# 1 1 1 2 -1.0
# 2 0 2 2 4.0
# 3 1 3 2 1.0
uj5u.com熱心網友回復:
- 使用 JAX,您就可以擺脫 cpu/gpu/tpu 的選擇,XLA 為您選擇的硬體提供后端。
- 使用 dict 并丟失 ifelse(以 jax.numpy.op:op_code 的形式)
- 如果需要,丟失回圈并使用 jax.pmap 在多臺機器上映射資料操作。
轉載請註明出處,本文鏈接:https://www.uj5u.com/qianduan/397432.html
