如何在python中使用for循环将向量从矩阵添加到空矩阵中?



我有一个加速度计传感器读取x,y和z轴,我想把它传递给fft函数。所以我想初始化一个矩阵(yf)有3行和未知列(所有3行都有相同数量的值,例如n x m, n=3,但m是未知的)。我想把fft函数的结果存储到yf矩阵中但是我不知道怎么做。我有c,c++和matlab的背景,但是当涉及到python时,语法是如此奇怪,我有时间实现它。

为了测试我的想法,我下面有我的测试代码。我只是想知道如何将一个向量附加到一个未知维度的矩阵中。

a = np.linspace(1,30,30).reshape(3,10)
yf = []
d = [0,1,2]
for ii in d:
yf.append(a[ii] for ii in a)
print(yf)

如果我这样做,yf将有以下结果

[<generator object <genexpr> at 0x000001511CB4F190>, <generator object <genexpr> at 0x000001512B403F90>, <generator object <genexpr> at 0x000001512B43B040>]

我希望yf类似于a,但通过将a的行向量附加到yf

[[ 1.  2.  3.  4.  5.  6.  7.  8.  9. 10.]
[11. 12. 13. 14. 15. 16. 17. 18. 19. 20.]
[21. 22. 23. 24. 25. 26. 27. 28. 29. 30.]]

在向矢量添加额外的轴后使用广播,只需像这样添加+np.add的2个数组-

# (3,10) + (3, 1) -> (3,10)

a + np.array(d).reshape(-1,1)
#### OR ####
a + np.array(d)[:,None]
#### OR ####
a + np.array(d)[:, np.newaxis]
array([[ 1.,  2.,  3.,  4.,  5.,  6.,  7.,  8.,  9., 10.],
[12., 13., 14., 15., 16., 17., 18., 19., 20., 21.],
[23., 24., 25., 26., 27., 28., 29., 30., 31., 32.]])
for ii in d:
yf.append(a[ii])

for row in a: 
yf.append(row)

将清除列表,追加

yf = [ii for ii in a]

工作的例子:

In [65]: a = np.linspace(1,30,30).reshape(3,10)
...: yf = []
...: d = [0,1,2]
...: for ii in d:
...:   yf.append(a[ii])
...: 
In [66]: yf
Out[66]: 
[array([ 1.,  2.,  3.,  4.,  5.,  6.,  7.,  8.,  9., 10.]),
array([11., 12., 13., 14., 15., 16., 17., 18., 19., 20.]),
array([21., 22., 23., 24., 25., 26., 27., 28., 29., 30.])]

用:

将数组列表转换为数组
In [67]: np.array(yf)
Out[67]: 
array([[ 1.,  2.,  3.,  4.,  5.,  6.,  7.,  8.,  9., 10.],
[11., 12., 13., 14., 15., 16., 17., 18., 19., 20.],
[21., 22., 23., 24., 25., 26., 27., 28., 29., 30.]])

或与concatate/stack类函数一起使用:

In [69]: np.vstack(yf)
Out[69]: 
array([[ 1.,  2.,  3.,  4.,  5.,  6.,  7.,  8.,  9., 10.],
[11., 12., 13., 14., 15., 16., 17., 18., 19., 20.],
[21., 22., 23., 24., 25., 26., 27., 28., 29., 30.]])

我们经常遇到这样的问题,人们试图迭代地使用np.append来做到这一点,但这很难做到正确,而且速度较慢。重复的列表追加,然后在末尾进行一个数组构造,效果更好。

最新更新