Мне нужно заполнить большой 2D-массив блоками из меньшего 2D-массива, но при этом учитывать меньшее количество строк столбцов, чем ширина блока на краю новой большой 2D-массив. Например, чтобы создать массив справа от массива слева, используя блок 3x3.Заполнить большую матрицу из меньшей матрицы
[[ 1 2 3 4] [[ 1. 1. 1. 2. 2. 2. 3. 3. 3. 4. 4.]
[ 5 6 7 8] -> [ 1. 1. 1. 2. 2. 2. 3. 3. 3. 4. 4.]
[ 9 10 11 12]] [ 1. 1. 1. 2. 2. 2. 3. 3. 3. 4. 4.]
[ 5. 5. 5. 6. 6. 6. 7. 7. 7. 8. 8.]
[ 5. 5. 5. 6. 6. 6. 7. 7. 7. 8. 8.]
[ 5. 5. 5. 6. 6. 6. 7. 7. 7. 8. 8.]
[ 9. 9. 9. 10. 10. 10. 11. 11. 11. 12. 12.]]
Я реализовал это, как показано ниже, но я ищу более разумный способ сделать это.
# Smaller array
a=np.array([[1,2,3,4],[5,6,7,8],[9,10,11,12]])
# The size of the blocks for filling in the matrix
blockSize = 3
# The number of columns and rows of the new matrix (b)
cols = 11
rows = 7
b = np.zeros([rows, cols])
for i in range(0, rows, blockSize):
ii = i/blockSize
if i + blockSize < rows:
numRows = blockSize
else:
numRows = rows - i
for j in range(0, cols, blockSize):
jj= j/blockSize
if j + blockSize < cols:
numCols = blockSize
else:
numCols = cols - j
b[i:i+numRows,j:j+numCols] = a[ii,jj]
что вы хотите хорошо знать математические операции: https://en.wikipedia.org/wiki/Kronecker_product и реализован в numpy: см. http://stackoverflow.com/questions/29752319/build-matrix-from-blocks –