【问题标题】:Filling a 2D Array with Another Array用另一个数组填充 2D 数组
【发布时间】:2019-11-17 14:53:48
【问题描述】:

我正在尝试使用 for 循环填充一个二维数组,其中的变量是一个数组。从这个数组中,我希望找到每列的平均值并将其输入到一个新数组中。

但是,我不知道如何将变量输入到二维数组中。

A_values = numpy.zeros([20, 1])

print(A_values)

for i in range(0,20):
    A_values([1,i]) = xa

在这段代码中,xa 是一个随着每次迭代而变化的变量,长度为 402。

我试图让二维数组“A_values”有 402 列和 20 行

【问题讨论】:

    标签: python arrays for-loop multidimensional-array


    【解决方案1】:

    您是否一定要使用 for 循环?我问这个问题是因为可以通过更简单、更有效的方式解决这个问题,例如:

    import numpy as np
    
    a_values = np.random.rand(20,402) #Store random values in a_values with a shape of 20 rows and 402 columns
    avg_columns = a_values.mean(axis=0) #Calculate the mean of each column 
    
    print(avg_columns)
    

    生成随机值的文档:numpy.random.rand

    编辑:

    我假设 xa 在每次迭代中都是随机的(确保将其替换为您正在生成的 xa)。您可以初始化一个空的a_values 数组,并在每次迭代中使用np.vstack 将生成的xa 数组添加到其中。对于第一次迭代,当a_value 为空时,我将其设置为等于xa (if a_values.size else xa)。

    import numpy as np
    
    a_values = np.array([])
    
    for i in range(20):
      xa = np.random.rand(1,402)
      a_values = np.vstack([a_values, xa]) if a_values.size else xa
    
    avg_columns = a_values.mean(axis=0) #Average of each column
    

    vstack 的文档:numpy.vstack

    【讨论】:

    • 抱歉,我应该更清楚一点,数组没有填充随机数,而是填充了表示放射性衰变过程中留下的 A 粒子数量的整数。不过谢谢!
    • 没问题。我编辑了我的帖子,这是你想要的吗?
    • 好的,再次感谢您!我的代码中的问题原来是在方括号周围使用括号继续给我一个调用函数错误。谢谢!
    【解决方案2】:

    我认为您无法在 A_values 定义后更改其形状。所以你应该从:

    A_values = numpy.zeros([20,402])
    

    如果你的 for 循环遍历 rows,你的索引应该是 [i, 1](numpy 数组索引不像笛卡尔平面坐标)。

    但是您想更改 A_values 的整行,为此您只需使用第一个索引:

    A_values[row] = some_row
    

    记住“some_row”需要有合适的长度,否则你会得到一个ValueError。

    您的最终代码将如下所示:

    A_values = numpy.zeros([20, 402])
    
    for i in range(0,20):
        A_values([i]) = xa
    

    PS:如果您还需要有关“xa”值的帮助,您应该描述您遇到的错误并且更清楚......

    【讨论】:

    • 感谢您的帮助!但是,我收到一条错误消息“无法分配给函数调用”。 xa = numpy.concatenate([evolve_system(NA, NB, NC, rules1, nsteps)[0], Evolution_system(final_NA, final_NB, final_NC, rules2, nsteps)[0]]),其中evolve_system是先前定义的函数。
    • evolve_system 返回什么?要使用 numpy.concatenate(),两个参数都必须是 numpy.arrays 并且您需要使用右轴。看看这里:docs.scipy.org/doc/numpy/reference/generated/…(我实际上认为错误现在在evolve_system函数中)
    • evolve_systems 返回一个整数数组。
    • 您应该删除这对外部方括号:numpy.concatenate(evolve_system(NA, NB, NC, rules1, nsteps)[0], Evolution_system(final_NA, final_NB, final_NC, rules2, nsteps) [0])
    猜你喜欢
    • 2013-03-16
    • 1970-01-01
    • 2020-11-05
    • 1970-01-01
    • 2021-05-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多