numpy代表矩阵数组

时间:2018-11-02 21:53:26

标签: python arrays numpy matrix

我有一个2x2复杂矩阵的数组,它表示scattering矩阵随时间的变换。对于我的计算,我需要一种在自己之间将这样的数组相乘的方法(矩阵相乘)。将阵列中的每个矩阵乘以另一个矩阵;将transformation应用于数组中的所有矩阵。

我尝试了多种方法来使用numpy(4列数组,数组数组,矩阵数组,矩阵列表),但是它们中的每一种,同时为某些所需的功能,使其余的功能很尴尬。

这就是问题-表示这种结构的最佳方法是什么,我将如何对它们进行所需的转换?

示例

最初的数据位于csv文件中:

import numpy as np
csv = np.arange(45.).reshape(5,9)
t = np.array(csv[:,0])  # time array

4列数组

csv转换为4列数组:

data = np.apply_along_axis(lambda x: [x[1]+1j*x[2],
                                      x[3]+1j*x[4],
                                      x[5]+1j*x[6],
                                      x[7]+1j*x[8]],1,csv)

数组x矩阵:

m = np.array([[1,0],[0,0]])
np.apply_along_axis(lambda x: (x.reshape(2,2).dot(m)).reshape(1,4),1,data)

数组x数组: 可能需要for循环和数组预分配

转化:

np.apply_along_axis(lambda x: [-(x[0]*x[3]-x[1]*x[2])/x[2],
                               x[0]/x[2],
                               -x[3]/x[2],
                               1/x[2]],1,data)

数组列表

csv转换为数组列表:

data = [np.array([[i[1]+1j*i[2],
                   i[3]+1j*i[4]],
                  [i[5]+1j*i[6],
                   i[7]+1j*i[8]]]) for i in csv]

数组x矩阵:

m = np.array([[1,0],[0,0]])
[i.dot(m) for i in data]

数组x数组:

[data[i].dot(data[i]) for i in range(len(data))]

转化:

[np.array([[-(np.linalg.det(x))/x[0,1],
            x[0,0]/x[1,0]],
           [-x[1,1]/x[0,1],
            1/x[0,1]]]) for x in data]

矩阵数组

csv转换为矩阵数组:

data = np.apply_along_axis(lambda x: [[x[1]+1j*x[2],
                                       x[3]+1j*x[4]],
                                      [x[5]+1j*x[6],
                                       x[7]+1j*x[8]]],1,csv)

数组x矩阵:

m = np.array([[1,0],[0,0]])
data.dot(m)

数组x数组: 可能需要for循环和数组预分配

data * data # not a dot product

转换: 可能需要for循环和数组预分配

0 个答案:

没有答案