Python使用shi添加numpy数组

2024-06-16 12:02:52 发布

您现在位置:Python中文网/ 问答频道 /正文

如何使用pythonnumpy数组使用shift完成列添加?在

我有二维数组,需要它的扩展拷贝。在

a = array([[0, 2, 4, 6, 8],
       [1, 3, 5, 7, 9]])

我想要这样的东西(以下是伪代码,它不起作用;据我所知,numpy中没有a.columns):

^{pr2}$

我也知道,我可以用索引做类似于我需要的事情。但我觉得列举三个值而只使用一个(j)真是太过分了:

for (i,j),value in np.ndenumerate(a):
    print i,j

我发现,我可以迭代列,但不能遍历它们的索引:

for column in a.T:
    print column

我认为我可以简单地用类似于xrange的东西来实现,但是应用于多维数组:

In [225]: for column in np.ndindex(a.shape[1]):
            print column
   .....:     
(0,)
(1,)
(2,)
(3,)
(4,)

所以现在我只知道如何用简单的xrange来实现这一点,我不确定,这是最好的解决方案。在

out = np.zeros(a.shape)
shift = 2
mult_factor = 0.7
for i in xrange(a.shape[1]-shift):
    print a[:, i]
    out[:, i] =  a[:, i] + mult_factor * a[:, i+shift]

然而,在Python中,它的速度可能不会太快。 你能给我一个建议吗?它的性能如何?也许有更快速的方法用shift来完成numpy数组的列添加?在


Tags: innumpyforshiftnpcolumn数组out
2条回答
out = a[:, :-shift] + mult_factor * a[:, shift:]

我想这就是你要找的。它是循环的向量化形式,在a的大片段上操作,而不是逐列操作。在

我不确定,我完全理解计算出的数量应该是多少,但这里有两件事似乎与你的要求密切相关:

  1. 如果您有一个名为a的2D数组,您希望将其转换为1D数组的列表,这些数组是a的列,那么可以这样做

    cols=[c代表a.T中的c]

  2. 如果我没弄错的话,你想要的东西可以用矩阵乘法来完成。您可以使用numpy.diag在numpy中创建带状矩阵,或者,由于每个带1、mult_因子或0的值相同,所以可以使用scipy.linalg.toeplitz

    m,n=a.shape
    波段=np.eye公司(1,n)
    频带[0,移位]=多因子
    T=西皮.利纳格.托普利茨(np.eye公司(1,m),波段)
    输出=np.内部(a,T)

对于大型矩阵,如果您只想添加T的两列或几列,那么为T使用稀疏矩阵可能是有意义的。在

相关问题 更多 >