【问题标题】:Appending a Numpy array to a list将 Numpy 数组附加到列表中
【发布时间】:2016-04-19 09:42:01
【问题描述】:

我是 Python 的新手,甚至是 Numpy 的新手,如果我在某个地方犯了错误,我深表歉意。

基本上,我正在获取一个角度列表(长度不确定),根据这些值的三角函数计算一个数组,然后创建一个新列表,其中每个索引处都是一个与值的索引相对应的“三角数组”在角度列表中创建它。

当前循环计算正确的数组并按预期一次打印一个,但是,函数的最终输出是单个数组而不是每个数组的列表。

任何帮助将不胜感激!

            def tmatrices(angles):
                for angle in angles:
                    tmatrices = []
                    cos = math.cos(angle)
                    cos2 = (math.cos(angle)) ** 2)
                    sin = math.sin(angle)
                    sin2 = (math.sin(angle)) ** 2)
                    T = np.array( (((cos2), (sin2), (sin*cos)), ((sin2), (cos2), ((-sin) * cos)), ((-2 * sin * cos), (2 * sin * cos), (cos2 - sin2))) )
                    print (T)
                    tmatrices.append(T)
                return tmatrices

【问题讨论】:

  • 循环中的第一行在每次迭代时都会重置tmatrices
  • 当然谢谢!

标签: python arrays list numpy


【解决方案1】:

我认为你犯了一些错误并且

tmatrices = []

应该可能在循环之外?

也就是说,你可能更喜欢用 numpy 来使用 numpy 并继续使用

import numpy


def tmatrix(angles):
    cos  = numpy.cos(angles)[numpy.newaxis, :]
    cos2 = cos**2
    sin  = numpy.sin(angles)[numpy.newaxis, :]
    sin2 = sin**2
    T = numpy.concatenate( (cos2, sin2, sin*cos, sin2, cos2, -sin * cos, -2 * sin * cos, 2 * sin * cos, cos2 - sin2 ), axis=0)
    return T


angles = numpy.arange(0, 2*numpy.pi, numpy.pi/10)
print tmatrix(angles)

这将返回一个矩阵,其行代表不同的函数,其列由角度确定。

【讨论】:

  • 好的,所以我不完全确定这段代码中发生了什么(我的经验有限,但是经过快速检查,这种方法不会创建一个大矩阵而不是单独的不同矩阵列表?
  • 是的,它创建了一个大矩阵。这似乎是一种不太明显的处理方式,但它允许您一次性对整个矩阵执行操作。