【问题标题】:How do I add a vector from a matrix into an empty matrix using for loop in python?如何使用python中的for循环将矩阵中的向量添加到空矩阵中?
【发布时间】:2021-08-17 11:05:52
【问题描述】:

我有一个用于 x、y 和 z 轴的加速度计传感器读数,我想将它传递给 fft 函数。所以我想用 3 行和未知列初始化一个矩阵(yf)(所有 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>]

我希望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.]]

【问题讨论】:

    标签: python numpy matrix


    【解决方案1】:

    在向向量添加一个附加轴后使用broadcasting,然后像这样简单地使用+np.add 添加两个数组 -

    # (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.]])
    

    【讨论】:

    • 但是先生,我如何将矩阵中的向量添加到这个新的空矩阵中。抱歉,我只是编辑我的问题。
    • 我对你想要做什么感到有点困惑。为什么不直接设置yf = a + np.array(d)[:,None],这不解决你的问题吗?
    【解决方案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 来执行此操作,但这更难正确处理,而且速度较慢。重复列表追加,最后一个数组构造更好。

    【讨论】:

    • 谢谢先生。但是当我做print(yf) 时,结果是 [array([ 1., 2., 3., 4., 5., 6., 7., 8., 9., 10.]), array([11 ., 12., 13., 14., 15., 16., 17., 18., 19., 20.]), 数组([21., 22., 23., 24., 25., 26 ., 27., 28., 29., 30.])]。这种类型在python中是否被视为矩阵?
    • 数组列表可以变成二维数组 - 看我的编辑
    猜你喜欢
    • 2014-07-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-05-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多