我有一个像这样的5x5数组:
array([[ 0., 0., 0., 0., 0.],
[ 0., 0., 0., 0., 0.],
[ 0., 0., 0., 0., 0.],
[ 0., 0., 0., 0., 0.],
[ 0., 0., 0., 0., 0.]])
我也有这样的3x3阵列:
array([[ 1., 0., 1.],
[ 0., 1., 0.]])
我想将3x3阵列合并到5x5阵列中,以便它看起来像:
array([[ 1., 0., 1., 0., 0.],
[ 0., 1., 0., 0., 0.],
[ 0., 0., 0., 0., 0.],
[ 0., 0., 0., 0., 0.],
[ 0., 0., 0., 0., 0.]])
类似地,我可能有其他具有各种维度的数组(25,25),(15,13),(2,8)等。使用5x5零作为模板合并的最佳方法是什么其他数组进入它?
例如,假设我的"模板"数组为零((5,5))。我有另一个数组((12,12))。我想调整它们的大小((12,12)),使它的新大小为5x5。关于"额外"行/列:应忽略最后7行和最后7列。
是否有内置的numpy方法可以实现此目的?
答案 0 :(得分:1)
您可以先找到第二个数组的形状,然后使用indexing
将第二个数组应用到第一个数组:
>>> import numpy as np
>>> a=np.array([[ 0., 0., 0., 0., 0.],
... [ 0., 0., 0., 0., 0.],
... [ 0., 0., 0., 0., 0.],
... [ 0., 0., 0., 0., 0.],
... [ 0., 0., 0., 0., 0.]])
>>> b=np.array([[ 1., 0., 1.],
... [ 0., 1., 0.]])
>>> i,j=b.shape
>>> a[:i,:j]=b
>>> a
array([[ 1., 0., 1., 0., 0.],
[ 0., 1., 0., 0., 0.],
[ 0., 0., 0., 0., 0.],
[ 0., 0., 0., 0., 0.],
[ 0., 0., 0., 0., 0.]])
但是,当数组b
大于a
时,您希望将a
的元素替换为b
元素,则可以将其分割为形状为b
的{{1}}数组,然后分配给a
:
a
答案 1 :(得分:1)
我最终这样做了:
def reshape_array(orig_array):
max_x = 5
max_y = 5
rows, cols = orig_array.shape
if rows < max_x:
new_row_len = max_x - rows
elif rows >= max_x:
new_row_len = 0
if cols < max_y:
new_col_len = max_y - cols
elif cols >= max_y:
new_col_len = 0
new_x = np.zeros((new_row_len, cols))
new_y = np.zeros((max_y, new_col_len))
result = np.copy(orig_array)
result = np.delete(result, np.s_[max_y:], axis=1)
result = np.delete(result, np.s_[max_x:], axis=0)
if not len(new_x) == 0:
result = np.append(result, new_x, axis=0)
if not len(new_y) == 0:
result = np.append(result, new_y, axis=1)
return result
我使用reshape_array()
成功测试了以下数组a = np.ones((3, 3))
b = np.ones((5, 5))
c = np.ones((2, 4))
d = np.ones((10, 10))