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

2024-04-27 17:05:45 发布

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

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

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

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>]

我希望yfa类似,但将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.]]

Tags: 函数infftfor数量object矩阵传感器
2条回答
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.]])

或使用串联/堆栈族中的函数:

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来实现这一点,但这很难做到正确,而且速度较慢。重复列表追加,然后在末尾构造一个数组更好

在向向量添加额外的轴后使用broadcasting,只需添加带有+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.]])

相关问题 更多 >