【问题标题】:The simplest way for creating 2D matrix in loop循环创建二维矩阵的最简单方法
【发布时间】:2017-06-04 22:52:34
【问题描述】:

我想知道如何以最简单的方式从循环中的向量创建矩阵。我有一个包含条件(所以我不知道矩阵的最终形状)的循环,在该条件下我想将一个向量附加到矩阵(它应该在开始时为空)。我想做类似的事情:

import numpy as np

for i in range(100):
   vector=np.random.random(10)
   condition=np.random.choice([True, False])
   if (condition):
      matrix[i,:]=vector

在 matlab 中这非常简单(书面示例(在 matlab 语法 ofc 中)完美运行)。然而,python 有更多(至少对我而言)具有数组和列表的复杂系统。因此,如果有人知道如何在 python 中执行此操作最简单和最正确的方法,请举个例子。非常感谢!

【问题讨论】:

    标签: python for-loop matrix vector


    【解决方案1】:

    您可以将matrix 设为python 列表,然后使用.append() 添加vector。然后在你的循环调用np.array(matrix)

    import numpy as np
    
    matrix_as_list = []
    
    for i in range(100):
       vector=np.random.random(10)
       condition=np.random.choice([True, False])
       if (condition):
          matrix_as_list.append(vector)
    
    matrix = np.array(matrix_as_list)
    

    我不确定 Python,但在 MATLAB 中,将矩阵实际初始化为 100-by-10 矩阵然后删除不必要的行而不是在环形。当然,最快的方法是将解决方案矢量化以完全不使用循环。

    【讨论】:

    • 非常感谢!我希望有一个解决方案,只是使用数组 - 而不是转换为列表然后返回。
    • 您能否更具体地说明“将解决方案矢量化为根本不使用循环”?谢谢
    • 为什么不使用列表?我的解决方案只转换一次 btw
    • 完全矢量化将完全取决于您的用例。如果这个例子是你真正想做的,那么在0和100之间选择一个随机整数,我们称之为k,现在matrix只是一个np.random.random(k,10),没有循环
    猜你喜欢
    • 1970-01-01
    • 2018-03-21
    • 1970-01-01
    • 1970-01-01
    • 2021-10-04
    • 1970-01-01
    • 2015-01-25
    • 1970-01-01
    • 2022-09-30
    相关资源
    最近更新 更多