【问题标题】:How to efficiently compute function for every cell in numpy array?如何有效地计算 numpy 数组中每个单元格的函数?
【发布时间】:2016-01-17 00:11:55
【问题描述】:

我想迭代一个 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)

【问题讨论】:

  • 这个解决方案可以帮助stackoverflow.com/a/8079151/5050917 吗?
  • vectorvector_length是什么关系?
  • Vector 是一个数字数组,vector_length 是它的长度。它实际上并不重要。方法调用才是本质:D

标签: python performance numpy matrix


【解决方案1】:

这似乎是一个经典的 numpy 问题。 states 听起来像是 state 的列表,有两个属性,musigma

我认为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)

【讨论】:

    猜你喜欢
    • 2017-08-12
    • 1970-01-01
    • 2011-12-03
    • 2012-09-18
    • 2021-06-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多