You can use numpy.fromiter with operator.itemgetter. Note a standard NumPy array is not a good choice for mixed types (dtype object), as this will cause all data to be stored in pointers.
a = [['1', 'a'], ['2', 'b']]
from operator import itemgetter
res = np.fromiter(map(itemgetter(0), a), dtype=int)
print(res)
array([1, 2])
Some performance benchmarking:
a = [['1', 'a'], ['2', 'b']] * 10000
%timeit np.fromiter(map(itemgetter(0), a), dtype=int) # 4.31 ms per loop
%timeit np.array(a)[:, 0].astype(int) # 15.1 ms per loop
%timeit np.array([i[0] for i in a]).astype(int) # 8.3 ms per loop
If you need a structured array of mixed types:
x = np.array([(int(i[0]), i[1]) for i in a],
dtype=[('val', 'i4'), ('text', 'S10')])
print(x)
array([(1, b'a'), (2, b'b')],
dtype=[('val', '<i4'), ('text', 'S10')])