【问题标题】:Interpolating numpy array in python在python中插入numpy数组
【发布时间】:2021-12-17 23:09:52
【问题描述】:

我试图通过首先将列表转换为数组并执行计算来插入列表中包含的一些值。

但是,我需要写三次公式,并且需要手动指定索引。

这是我目前的代码

import numpy as np
data1 = [(5,), (4,), (6,)]
data2 = [(2,), (8,), (9,)]
data3 = [(3,), (1,), (7,)]

x1 = [(4, 2, 1)]
x2 = [(6, 9, 7)]
y1 = [(1,)]
y2 = [(3,)]

data1 = np.array(data1)
x1 = np.array(x1)
x2 = np.array(x2)
y1 = np.array(y1)
y2 = np.array(y2)

new1 = ((data1-x1[0,0])/(x2[0,0]-x1[0,0]))*(y2-y1)+y1
print(new1)

new2 = ((data2-x1[0,1])/(x2[0,1]-x1[0,1]))*(y2-y1)+y1
print(new2)

new3 = ((data3-x1[0,2])/(x2[0,2]-x1[0,2]))*(y2-y1)+y1
print(new3)

输出是

[[2.]
 [1.]
 [3.]]
[[1.        ]
 [2.71428571]
 [3.        ]]
[[1.66666667]
 [1.        ]
 [3.        ]]

我想知道是否有人有更好更快的方法来自动执行此操作,而无需手动编写所有内容?

【问题讨论】:

    标签: python arrays list numpy interpolation


    【解决方案1】:

    只需将data1data2 等放入一个数组中,您的表达式就可以用于逐元素和广播计算。

    >>> data = np.hstack([data1, data2, data3])
    >>> new = (data - x1) / (x2 - x1) * (y2 - y1) + y1
    >>> new
    array([[2.        , 1.        , 1.66666667],
           [1.        , 2.71428571, 1.        ],
           [3.        , 3.        , 3.        ]])
    

    如果您希望结果分别位于形状为 (3, 1) 的列状向量中,则执行 new = new[...,None] 然后 new[:,0] 将为您提供与您的 new1 完全相同的结果。

    【讨论】:

    • 谢谢它对我有用!
    猜你喜欢
    • 2013-09-08
    • 1970-01-01
    • 2011-09-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-01-16
    • 2018-02-25
    • 2015-08-24
    相关资源
    最近更新 更多