Python 寻找一个专门的numpy函数来避免使用多列表理解

Python 寻找一个专门的numpy函数来避免使用多列表理解,python,numpy,Python,Numpy,我的数学不是很好,虽然我是一个有经验的程序员,但我仍然是python的初学者 我有一个函数,它接受一个小的np.array(

我的数学不是很好,虽然我是一个有经验的程序员,但我仍然是python的初学者

我有一个函数,它接受一个小的np.array(<100个元素), 打了100000多次电话

使用numpy(pycharm中的全程序评测)需要23~25%的总cpu时间:

我的numpy版本的问题可能是,我取了一个np.array,使其成为列表理解,再次生成一个np.array,然后取这个np.array,再次生成列表理解,然后再次生成一个np.array,依此类推。在这么小的阵列上来回转换是不值得的


numpy版本可以优化吗?代码搞乱了。可能有某种专门的numpy map/reduce函数专门用于此功能。

了解广播后,我就是这样解决的:

    output = np.sum(_input[:,None] * self.weights + self.bias, axis=0)
    output = np.fromiter((self.activation(val) for val in output), dtype=np.single)

或者可能数组对于numpy来说太小了,我不知道。我最初尝试了dtype=float16,希望能进行一些自动矢量化,但没有得到任何结果,然后它就保持不变了。
\u input*self.weights
work?@hpaulj no:ValueError:操作数不能与形状(8,)(8,16)一起广播如果希望我们帮助编写更好的numpy代码,您应该指定相关数组的
形状<代码>\输入[:,无]*自身。权重应考虑广播错误。你读了足够多的
numpy
了解广播的含义了吗?
def call(self, _input):
    output = [_input[i] * self.weights[i] for i in range(len(self.weights))]
    output += self.bias
    output = [sum(output[:, i]) for i in range(len(self.weights[0]))]
    output = [self.activation(val) for val in output]
    self.output = output
    return output
    output = np.sum(_input[:,None] * self.weights + self.bias, axis=0)
    output = np.fromiter((self.activation(val) for val in output), dtype=np.single)