【问题标题】:How can I vectorize linspace in numpy [duplicate]如何在 numpy 中矢量化 linspace [重复]
【发布时间】:2017-07-25 20:16:46
【问题描述】:

我想对数组做 linspace。就像下面这样:

a = np.array([2, 4, 6])
b = vectorize(np.array)(0, a, 5)

我想要一些类似的东西:

b = [[0, 0.5, 1, 1.5, 2]
     [0, 1, 2, 3, 4]
     [0, 1.5, 3, 4.5, 6]]

这是我的代码:

import numpy as np
a = np.arange(1001)
c = np.vectorize(np.linspace)(0, a, 101)
print(c)

显示:ValueError: setting an array element with a sequence。 有没有什么方法可以在没有 for 循环的情况下在 numpy 中执行此操作?

【问题讨论】:

    标签: python numpy


    【解决方案1】:

    构建你自己的:

    def vlinspace(a, b, N, endpoint=True):
        a, b = np.asanyarray(a), np.asanyarray(b)
        return a[..., None] + (b-a)[..., None]/(N-endpoint) * np.arange(N)
    

    【讨论】:

    • 谢谢。为什么你使用 np.asanyarray 而不是 np.array?
    • @jiangniao 它不会强制复制,它只留下ndarray 子类,所以它是侵入性最小的。
    • 您介意解释一下这是如何工作的吗?
    • @Carpetfizz 它在 ab 广播到的内容的末尾添加了一个新维度(... 之后的 None 这样做)。该序列由arange 生成并占据该新维度。它通过端点的差异 (b-a) 除以点数 (N-endpoint) 并基于左端点 a 进行缩放。因为我们只使用基本的 numpy 操作,所以一切都是开箱即用的。
    猜你喜欢
    • 2018-03-15
    • 2017-03-30
    • 1970-01-01
    • 2012-11-11
    • 2018-03-17
    • 1970-01-01
    • 2021-11-22
    • 1970-01-01
    • 2015-02-21
    相关资源
    最近更新 更多