在 python 中插入 numpy 数组
Interpolating numpy array in python
我试图通过首先将列表转换为数组并执行计算来插入列表中包含的一些值。
但是,我需要写三次公式,需要手动指定索引。
到目前为止,这是我的代码
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. ]]
我想知道是否有人有更好更快的方法来自动执行此操作,而无需手动编写所有内容?
只需将 data1
、data2
等放入数组中,您的表达式将只适用于逐元素计算和广播计算。
>>> 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
.
我试图通过首先将列表转换为数组并执行计算来插入列表中包含的一些值。
但是,我需要写三次公式,需要手动指定索引。
到目前为止,这是我的代码
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. ]]
我想知道是否有人有更好更快的方法来自动执行此操作,而无需手动编写所有内容?
只需将 data1
、data2
等放入数组中,您的表达式将只适用于逐元素计算和广播计算。
>>> 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
.