Вы не можете получить квадратные массивы, если у вас нет одинаковой длины массива и одинакового количества символов в каждой строке. Однако вы можете получить массив m на n numpy, заполнив более мелкие строки специальным токеном.
import numpy as np
a_main = ['hello', 'world', 'this']
a = [list(a_i) for a_i in a_main]
print(a)
cols = 5
oov_token = 'Z'
for i in range(len(a)):
if len(a[i]) < cols:
a[i] = list( ''.join(k for k in a[i]).rjust(cols, oov_token))
print(a)
a = np.array(a, dtype = np.chararray)
print(a.shape)
print(a)
[['h', 'e', 'l', 'l', 'o'], ['w', 'o', 'r', 'l', 'd'], ['t', 'h', 'i', 's']]
[['h', 'e', 'l', 'l', 'o'], ['w', 'o', 'r', 'l', 'd'], ['Z', 't', 'h', 'i', 's']]
(3, 5)
[['h' 'e' 'l' 'l' 'o']
['w' 'o' 'r' 'l' 'd']
['Z' 't' 'h' 'i' 's']]