python - 有效地将每一行的元素相乘

标签 python arrays performance numpy multidimensional-array

给定一个大小为 (n, 3)n 约为 1000 的 ndarray,如何快速地将每一行的所有元素相乘?下面的(不优雅的)第二个解决方案运行时间约为 0.3 毫秒,是否可以改进?

# dummy data
n = 999
a = np.random.uniform(low=0, high=10, size=n).reshape(n/3,3)

# two solutions
def prod1(array):
    return [np.prod(row) for row in array]

def prod2(array):
    return [row[0]*row[1]*row[2] for row in array]

# benchmark
start = time.time()
prod1(a)
print time.time() - start
# 0.0015

start = time.time()
prod2(a)
print time.time() - start
# 0.0003

最佳答案

np.prod 接受轴参数:

np.prod(a, axis=1)

使用 axis=1,计算每一行的列乘积。

完整性检查

assert np.array_equal(np.prod(a, axis=1), prod1(a))

性能

17.6 µs ± 146 ns per loop (mean ± std. dev. of 7 runs, 100000 loops each)

(1000 倍加速)

关于python - 有效地将每一行的元素相乘,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49290059/

相关文章:

python - 使用 Keras 生成 LSTM 文本 : What is diversity?

Javascript 数组 - 从文本框(jquery)中提取的字符串创建

php - MySQL 无法创建新线程(errno 12)

python - 一个干净、轻量级的 Python 扭曲替代品?

python - 如何在 macOS 上安装 dbus-python?

python - numpy 标准化 4D 数组的 2D 子集

.net - SCT到期后续订WCF客户端吗?

php - 哪个更快?常量、变量或变量数组

python - 为什么我在进行此 api 调用时得到类型方法的对象不可 JSON 序列化

javascript - 获取数组内字符串的第一个单词 - 从返回 REST