展平和合并数组,然后将它们拆分回来

Posted

技术标签:

【中文标题】展平和合并数组,然后将它们拆分回来【英文标题】:Flatten and merge arrays and then split them back 【发布时间】:2021-07-06 09:40:15 【问题描述】:

假设我有 3 个矩阵 w2、w3 和 w4,形状为 (5,5) (5,5)(5,1)

是否有任何有效的方法来创建形状为(55,1)(55,) 的这3 个矩阵的扁平数组(进行一些计算),然后将这个新数组拆分回3 个形状与原始矩阵相同的矩阵?

我已经这样做了:

theta=w2.flatten()
theta=np.append(theta,w3)
theta=np.append(theta,w4)

然后:

w2=theta[0:25].reshape(5,5)
w3=theta[25:50].reshape(5,5)
w3=theta[50:].reshape(5,1)

但这似乎很慢。有没有更有效的方法?

【问题讨论】:

不确定这应该做什么,但可以尝试的一件事是通过np.concatenate 或类似方法一次连接所有数组。 您能否提供更多有关您正在计算的内容的见解?因为加快第一个进程的唯一方法是预先分配theta 中的空间,然后将结果直接写入带有w3[:] = theta[0:25].reshape(5, 5) 的原始数组中。但这两种操作都不会花费很多时间。 【参考方案1】:

函数flatten 执行复制,append 创建一个新的 Numpy 数组,而 reshape 不这样做。

您可以使用np.concatenate 后跟np.array_split 和一些reshape。方法如下:

# Flatten the matrices and concatenate the value in one new array.
theta = np.concatenate((w2.reshape(25), w3.reshape(25), w4.reshape(5)))

# Extract the 3 matrices and reshape them.
# Do not copy data, this just build 3 array views.
w2, w3, w4 = np.array_split(theta, [25, 50])
w2, w3, w4 = w2.reshape(5,5), w3.reshape(5,5), w4.reshape(5,1)

【讨论】:

以上是关于展平和合并数组,然后将它们拆分回来的主要内容,如果未能解决你的问题,请参考以下文章

比这更简单的方法来展平或合并 php 数组?

numpy中关于数组的合并,拆分,及降维

将 txt 文件合并为一个文件,然后再次拆分它们

从两个排序数组中获取前 K 项而不合并它们

Java实现合并排序(归并)详细代码

MongoDB聚合:将数组属性展平为根数组