我想迭代一个numpy数组并不是最有效的方法,我可以看到我的程序真的很慢,因为我有一个更大的数据集。
1)迭代矩阵并将函数应用于每个单元格的方法是什么?
这是代码的一部分:
# States and data are two lists with a few appended items ~100
rows = len(self.states)
cols = len(self.data)
self.trellis = np.zeros((rows, cols))
for i, state in enumerate(self.states):
for j, vector in enumerate(self.data):
self.trellis[i][j] = mvnun_wrapper(vector, state.mu, state.sigma, vector_length)
答案 0 :(得分:1)
这似乎是一个经典的numpy问题。 states
听起来像state
列表中包含2个属性,mu
和sigma
。
我认为vector_length
在这里是必不可少的,并假设mvnun
是三个标量的函数。
然后试试:
mu = [state.mu for state in states]
sigma = [state.sigma for state in states]
v=np.asarray(vector).reshape(-1,1) # a "column" vector
result = mvnun(v,mu,sigma)
举个例子:
class state():
def __init__(self):
self.mu=np.random.random()
self.sigma=np.random.random()
states=[state() for _ in range(10)] # 10 states
vector=list(range(5)) # a 5-vector
def mvnun(x,m,s) : return x*m+3*x*s # a scalar function
mu=[state.mu for state in states]
sigma = [state.sigma for state in states]
v=np.asarray(vector).reshape(-1,1) # a "column" vector
result = mvnun(v,mu,sigma)
result.shape
是(5,10)
。