【问题标题】:Storing all the outputs of for loop in a matrix python将for循环的所有输出存储在矩阵python中
【发布时间】:2015-03-06 05:42:09
【问题描述】:
from __future__ import division   
from math import *
import cmath   
import numpy as np

taup=3
eps = 0.000001;
i = 0;
del1 = 2*taup/150.;
x=[]
for tau in np.arange(-taup,taup,del1):
    i = i + 1;
    j = 0;
    fd = np.linspace(-5/taup,5/taup,151);
    val1 = 1. - abs(tau) / taup;
    val2 = pi * taup * (1.0 - abs(tau) / taup) * fd;
    x=np.hstack(abs( val1 * np.sin(val2+eps)/(val2+eps)))

我得到的输出 x 只是最后一次迭代输出,即 1x151。 但我希望所有迭代都存储在一个矩阵中(这里将是 151x151)。 我无法正确获取最后一行。

【问题讨论】:

    标签: python arrays for-loop numpy matrix


    【解决方案1】:

    您可以将一维数组附加到 x 然后 vstack 它们:

        ...
        x.append(np.hstack(abs( val1 * np.sin(val2+eps)/(val2+eps))))
    
    x = np.vstack(x)
    

    另外,预先创建结果数组可以更快:

    taus = np.arange(-taup,taup,del1)
    fd = np.linspace(-5/taup,5/taup,151);
    x = np.empty((taus.size, fd.size))
    for tau_i, tau in enumerate(taus):
    # or: 
    # for tau_i in range(taus.size):
    #     tau = taus[tau_i]
        i = i + 1;
        j = 0;
    
        val1 = 1. - abs(tau) / taup;
        val2 = pi * taup * (1.0 - abs(tau) / taup) * fd;
        x[tau_i] = np.hstack(abs( val1 * np.sin(val2+eps)/(val2+eps)))
    

    附:事实上,这段代码可以在没有任何for 循环的情况下编写,仅就数组操作而言。这对你来说是一个练习。

    【讨论】:

    • 对于第一个解决方案得到错误“AttributeError:'numpy.ndarray'对象没有属性'append”。第二个工作正常。谢谢。有没有其他方法可以在不创建空矩阵的情况下存储所有迭代值。
    • 这很奇怪,如果你在第一个变体中用[] 初始化x,你就不应该出现这样的错误。
    猜你喜欢
    • 1970-01-01
    • 2021-11-18
    • 2019-08-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多