我有一个加速度计传感器读取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
来做到这一点,但这很难做到正确,而且速度较慢。重复的列表追加,然后在末尾进行一个数组构造,效果更好。