ICode9

精准搜索请尝试: 精确搜索
首页 > 编程语言> 文章详细

python – 为2D Numpy数组逐行插值

2019-08-31 12:59:03  阅读:134  来源: 互联网

标签:python numpy


我有两个numpy数组:

x = np.array([1,2,3,4,5])
y = np.array([10,20,30,40,50])

我试图得到的是这样的:

array([[  1.  ,   3.25,   5.5 ,   7.75,  10.  ],
       [  2.  ,   6.5 ,  11.  ,  15.5 ,  20.  ],
       [  3.  ,   9.75,  16.5 ,  23.25,  30.  ],
       [  4.  ,  13.  ,  22.  ,  31.  ,  40.  ],
       [  5.  ,  16.25,  27.5 ,  38.75,  50.  ]])

我的方法不是很像Numpy,需要改进(摆脱for循环)非常大的数组:

myarray = np.zeros((5,5))
for idx in np.arange(5):
    myarray[idx,:] = np.linspace(x[idx], y[idx], 5)

在Numpy这样做的好方法是什么?
以这种方式生成myarray然后操纵它会更好吗?

myarray = np.zeros((5,5))
myarray[:,0] = x
myarray[:,-1] = y

array([[  1.,   0.,   0.,   0.,  10.],
       [  2.,   0.,   0.,   0.,  20.],
       [  3.,   0.,   0.,   0.,  30.],
       [  4.,   0.,   0.,   0.,  40.],
       [  5.,   0.,   0.,   0.,  50.]])

解决方法:

这种广播技巧有效:

>>> x = np.array([1,2,3,4,5])
>>> y = np.array([10,20,30,40,50])
>>> z = np.linspace(0, 1, 5)
>>> z[None, ...] * (y[..., None] - x[..., None]) + ( x[..., None])
array([[  1.  ,   3.25,   5.5 ,   7.75,  10.  ],
       [  2.  ,   6.5 ,  11.  ,  15.5 ,  20.  ],
       [  3.  ,   9.75,  16.5 ,  23.25,  30.  ],
       [  4.  ,  13.  ,  22.  ,  31.  ,  40.  ],
       [  5.  ,  16.25,  27.5 ,  38.75,  50.  ]])
>>> 

标签:python,numpy
来源: https://codeday.me/bug/20190831/1775849.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有