Python 用零展开矩阵的numpy数组
用零填充矩阵数组最有效的方法是什么 例如:Python 用零展开矩阵的numpy数组,python,numpy,Python,Numpy,用零填充矩阵数组最有效的方法是什么 例如: # Lets construct an array of 2 matrices from 3 arrays of vectors import numpy as np A = np.array([[0,1,2],[3,4,5]]) # 2 vectors B = np.array([[6,7,8],[9,10,11]]) # 2 vectors C = np.array([[12,13,14],[15,16,17]]) # 2 v
# Lets construct an array of 2 matrices from 3 arrays of vectors
import numpy as np
A = np.array([[0,1,2],[3,4,5]]) # 2 vectors
B = np.array([[6,7,8],[9,10,11]]) # 2 vectors
C = np.array([[12,13,14],[15,16,17]]) # 2 vectors
M = np.dstack((A,B,C))
'''
# Result: array([[[ 0, 6, 12],
[ 1, 7, 13],
[ 2, 8, 14]],
[[ 3, 9, 15],
[ 4, 10, 16],
[ 5, 11, 17]]]) #
'''
我想向数组中的每个矩阵元素添加一列和/或一行零,例如:
'''
# Result: array([[[ 0, 6, 12, 0],
[ 1, 7, 13, 0],
[ 2, 8, 14, 0],
[ 0, 0, 0, 0]],
[[ 3, 9, 15, 0],
[ 4, 10, 16, 0],
[ 5, 11, 17, 0]
[ 0, 0, 0, 0]]]) #
'''
你会想用它来做这件事。您可以使用第二个输入参数指定数组每个维度中数据前后的填充量。然后指定一个常量填充类型,其中填充值为0(默认值)
你会想用它来做这件事。您可以使用第二个输入参数指定数组每个维度中数据前后的填充量。然后指定一个常量填充类型,其中填充值为0(默认值)
np.pad
将起作用,但在这种情况下,它是过度杀伤力。我们可以通过以下方式直接实现:
示例3d阵列(不同的尺寸会使更改更加明显)
所需目标形状的空白数组
In [410]: M1=np.zeros((2,4,5),M.dtype)
将值从M
复制到右切片范围内的目标
In [411]: M1[:,:-1,:-1]=M
In [412]: M1
Out[412]:
array([[[ 0, 1, 2, 3, 0],
[ 4, 5, 6, 7, 0],
[ 8, 9, 10, 11, 0],
[ 0, 0, 0, 0, 0]],
[[12, 13, 14, 15, 0],
[16, 17, 18, 19, 0],
[20, 21, 22, 23, 0],
[ 0, 0, 0, 0, 0]]])
像这样的副本是必需的。无法扩展M
本身的大小pad
执行了此分配和复制的常规版本后,还返回一个新数组。因此,效率问题不大
您还可以在正确的维度中连接(或“附加”)0行或列。但我所演示的是一步完成的。
np.pad
将起作用,但在这种情况下,它是多余的。我们可以通过以下方式直接实现:
示例3d阵列(不同的尺寸会使更改更加明显)
所需目标形状的空白数组
In [410]: M1=np.zeros((2,4,5),M.dtype)
将值从M
复制到右切片范围内的目标
In [411]: M1[:,:-1,:-1]=M
In [412]: M1
Out[412]:
array([[[ 0, 1, 2, 3, 0],
[ 4, 5, 6, 7, 0],
[ 8, 9, 10, 11, 0],
[ 0, 0, 0, 0, 0]],
[[12, 13, 14, 15, 0],
[16, 17, 18, 19, 0],
[20, 21, 22, 23, 0],
[ 0, 0, 0, 0, 0]]])
像这样的副本是必需的。无法扩展M
本身的大小pad
执行了此分配和复制的常规版本后,还返回一个新数组。因此,效率问题不大
您还可以在正确的维度中连接(或“附加”)0行或列。但是我所演示的是一步完成的。nice,这比我的用例(超过100万个矩阵)上的
np.pad
快约3倍。nice,这比我的用例(超过100万个矩阵)上的np.pad
快约3倍