Python 表示矩阵数组的numpy
我有一个2x2复杂矩阵的数组,表示矩阵随时间的变换。对于我的计算,我需要一种方法来将这些数组相乘(矩阵相乘);将数组中的每个矩阵乘以另一个矩阵;将a应用于数组中的所有矩阵 我用Python 表示矩阵数组的numpy,python,arrays,numpy,matrix,Python,Arrays,Numpy,Matrix,我有一个2x2复杂矩阵的数组,表示矩阵随时间的变换。对于我的计算,我需要一种方法来将这些数组相乘(矩阵相乘);将数组中的每个矩阵乘以另一个矩阵;将a应用于数组中的所有矩阵 我用numpy(4列数组、数组数组数组、矩阵数组、矩阵列表)尝试了多种方法,但每种方法都为一些必需的函数提供了一个很好的接口,这使得其余的都非常棘手 所以这里有一个问题-什么是表示这种结构的最佳方式,我将如何对它们执行所需的转换 例子 最初数据位于csv文件中: import numpy as np csv = np.aran
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)
m = np.array([[1,0],[0,0]])
[i.dot(m) for i in data]
m = np.array([[1,0],[0,0]])
data.dot(m)
阵列x阵列:
可能需要for循环和数组预分配
data * data # not a dot product
转变:
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)
[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.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]])
np.apply_along_axis(lambda x: (x.reshape(2,2).dot(m)).reshape(1,4),1,data)
m = np.array([[1,0],[0,0]])
[i.dot(m) for i in data]
m = np.array([[1,0],[0,0]])
data.dot(m)
阵列x阵列:
[data[i].dot(data[i]) for i in range(len(data))]
转变:
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)
[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]])
np.apply_along_axis(lambda x: (x.reshape(2,2).dot(m)).reshape(1,4),1,data)
m = np.array([[1,0],[0,0]])
[i.dot(m) for i in data]
m = np.array([[1,0],[0,0]])
data.dot(m)
阵列x阵列:
可能需要for循环和数组预分配
data * data # not a dot product
转变:
可能需要for循环和数组预分配数组和矩阵是什么意思?在numpy中,我们有各种形状和尺寸的
ndarray
。在可能的情况下,坚持使用这些方法。你可以对它们进行整形、转置、广播数学和矩阵乘法。这需要一个。我建议从(n,2,2)数组开始,并演示如何执行各种操作。或者至少展示简单的问题,用困难的问题描述问题。@hpaulj补充了一些例子
data * data # not a dot product