我有一个2x2复杂矩阵的数组,它表示scattering矩阵随时间的变换。对于我的计算,我需要一种在自己之间将这样的数组相乘的方法(矩阵相乘)。将阵列中的每个矩阵乘以另一个矩阵;将transformation应用于数组中的所有矩阵。
我尝试了多种方法来使用numpy
(4列数组,数组数组,矩阵数组,矩阵列表),但是它们中的每一种,同时为某些所需的功能,使其余的功能很尴尬。
这就是问题-表示这种结构的最佳方法是什么,我将如何对它们进行所需的转换?
最初的数据位于csv
文件中:
import numpy as np
csv = np.arange(45.).reshape(5,9)
t = np.array(csv[:,0]) # time array
将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循环和数组预分配