假设我有四个(N,)向量ABCD:

import numpy as np

N = 100

A = 1*np.ones(N)   # => array([1,1,1,...])
B = 2*np.ones(N)   # => array([2,2,2,...])
C = 3*np.ones(N)   # => array([3,3,3,...])
D = 4*np.ones(N)   # => array([4,4,4,...])

在我的应用程序中,每个元素都是矩阵的一个元素,并且矩阵随时间变化(尽管在本例中每个元素在时间上都是恒定的).我想要一个形状为(N,2,2)的矩阵,这样我就有一个2x2的矩阵,对于每个时间步,比如[[a,b],[c,d]],沿着0轴扩展.有没有比我下面的更好的方式把这些堆叠成这样的形状?

我的解决方案是:

A_ = np.reshape(A, (N,1,1))
B_ = np.reshape(B, (N,1,1))
C_ = np.reshape(C, (N,1,1))
D_ = np.reshape(D, (N,1,1))

AB = np.concatenate((A_, B_),axis=2)
CD = np.concatenate((C_, D_),axis=2)

ABCD = np.concatenate((AB,CD),axis=1)

这提供了:

>>> ABCD
array([[[1., 2.],
        [3., 4.]],

       [[1., 2.],
        [3., 4.]],

       [[1., 2.],
        [3., 4.]],
...
...
       [[1., 2.],
        [3., 4.]],

       [[1., 2.],
        [3., 4.]]])

如你所愿.只是很难理解它在做什么,所以我想知道是否有更好的方法.

推荐答案

将3D中级与dstack连接在一起,那么您将以理想的顺序执行简单的reshape:

np.dstack([A, B, C, D]).reshape(N, 2, 2)

输出:

array([[[1., 2.],
        [3., 4.]],

       [[1., 2.],
        [3., 4.]],

       [[1., 2.],
        [3., 4.]],

       ...,

       [[3., 4.],
        [3., 4.]]])

中级:

np.dstack([A,B,C,D]).shape
# (1, 100, 4)

Python相关问答推荐

Locust请求中的Python和参数

滚动和,句号来自Pandas列

管道冻结和管道卸载

如何在python xsModel库中定义一个可选[December]字段,以产生受约束的SON模式

如果条件不满足,我如何获得掩码的第一个索引并获得None?

pandas在第1列的id,第2列的标题,第3列的值,第3列的值?

当点击tkinter菜单而不是菜单选项时,如何执行命令?

Python中的变量每次增加超过1

在www.example.com中使用`package_data`包含不包含__init__. py的非Python文件

使用Python查找、替换和调整PDF中的图像'

Geopandas未返回正确的缓冲区(单位:米)

ruamel.yaml dump:如何阻止map标量值被移动到一个新的缩进行?

如何使用正则表达式修改toml文件中指定字段中的参数值

用fft计算指数复和代替求和来模拟衍射?

应用指定的规则构建数组

如何在Python中创建仅包含完整天数的月份的列表

将像素信息写入文件并读取该文件

如何在python tkinter中绑定键盘上的另一个回车?

极点:在固定点扩展窗口

为什么在不先将包作为模块导入的情况下相对导入不起作用