Вы можете сделать это, используя любой из следующих двух методов:
- Метод-1: Использование
numpy.array
- Метод-2: Использование
list.insert()
Решение
import numpy as np
a = np.array(list('abcdefghijklmnopqrstuvwxy')).reshape(5,5)
coords = [[0,0,1,1,2,2,3,3,4,4], [2,4,2,4,2,3,1,4,2,4]]
coords = np.array(coords).T
# Prep New Array with Extended Dimensions
unique, counts = np.unique(coords[:,0], return_counts=True)
b = np.empty((a.shape[0], a.shape[1] + int(counts.max())))
Метод 1: использование массива Numpy
bb = b.copy().astype(int).astype(str)
bb[coords[:,0], coords[:,1]] = '*'
bb[bb!='*'] = a.astype(str).flatten().copy()
print('\nMethod-1: Using numpy array\n')
display(bb)
Метод 2: использование метода list.insert ()
bbb = b.astype(str)
target_rows = np.unique(coords[:,0])
for row in range(b.shape[0]):
if row in target_rows:
cols = coords[coords[:,0]==row][:,1]
c = list(a[row,:])
for col in cols:
c.insert(col,'*')
#print(c)
bbb[row,:] = np.array(c.copy()).astype(str)
print('\nMethod-2: Using list.index()\n')
display(bbb)
Выход
Method-1: Using numpy array
array([['a', 'b', '*', 'c', '*', 'd', 'e'],
['f', 'g', '*', 'h', '*', 'i', 'j'],
['k', 'l', '*', '*', 'm', 'n', 'o'],
['p', '*', 'q', 'r', '*', 's', 't'],
['u', 'v', '*', 'w', '*', 'x', 'y']], dtype='<U21')
Method-2: Using list.index()
array([['a', 'b', '*', 'c', '*', 'd', 'e'],
['f', 'g', '*', 'h', '*', 'i', 'j'],
['k', 'l', '*', '*', 'm', 'n', 'o'],
['p', '*', 'q', 'r', '*', 's', 't'],
['u', 'v', '*', 'w', '*', 'x', 'y']], dtype='<U32')