如何使用pythonnumpy数组使用shift完成列添加?在
我有二维数组,需要它的扩展拷贝。在
a = array([[0, 2, 4, 6, 8],
[1, 3, 5, 7, 9]])
我想要这样的东西(以下是伪代码,它不起作用;据我所知,numpy
中没有a.columns
):
我也知道,我可以用索引做类似于我需要的事情。但我觉得列举三个值而只使用一个(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数组的列添加?在
我想这就是你要找的。它是循环的向量化形式,在
a
的大片段上操作,而不是逐列操作。在我不确定,我完全理解计算出的数量应该是多少,但这里有两件事似乎与你的要求密切相关:
如果您有一个名为
a
的2D数组,您希望将其转换为1D数组的列表,这些数组是a
的列,那么可以这样做cols=[c代表a.T中的c]
如果我没弄错的话,你想要的东西可以用矩阵乘法来完成。您可以使用
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
使用稀疏矩阵可能是有意义的。在相关问题 更多 >
编程相关推荐