Как я могу гарантировать, что массив numpy будет представлять собой либо вектор строки, либо столбец 2D? - PullRequest
0 голосов
/ 29 января 2019

Существует ли функция numpy, обеспечивающая, чтобы одномерный или двумерный массив был вектором столбца или строки?

Например, у меня есть один из следующих векторов / списков.Какой самый простой способ преобразовать входные данные в вектор-столбец?

x1 = np.array(range(5))
x2 = x1[np.newaxis, :]
x3 = x1[:, np.newaxis]

def ensureCol1D(x):
    # The input is either a 0D list or 1D.
    assert(len(x.shape)==1 or (len(x.shape)==2 and 1 in x.shape))
    x = np.atleast_2d(x)
    n = x.size
    print(x.shape, n)
    return x if x.shape[0] == n else x.T

assert(ensureCol1D(x1).shape == (x1.size, 1))
assert(ensureCol1D(x2).shape == (x2.size, 1))
assert(ensureCol1D(x3).shape == (x3.size, 1))

Вместо написания моей собственной функции ensureCol1D, есть ли что-то подобное, уже доступное в numpy, которое обеспечивает вектор длябыть колонкой?

1 Ответ

0 голосов
/ 29 января 2019

Ваш вопрос, по сути, заключается в том, как преобразовать массив в «столбец», причем столбец представляет собой двумерный массив с длиной строки 1. Это можно сделать с помощью ndarray.reshape(-1, 1).

Это означает, что выreshape ваш массив должен иметь длину строки, равную единице, и пусть numpy выводит количество строк / длину столбца.

x1 = np.array(range(5))
print(x1.reshape(-1, 1))

Вывод:

array([[0],
   [1],
   [2],
   [3],
   [4]])

Вы получаете тот же вывод при изменении формы x2 и x3.Кроме того, это также работает для n-мерных массивов:

x = np.random.rand(1, 2, 3)
print(x.reshape(-1, 1).shape)

Вывод:

(6, 1)

Наконец, единственное, чего здесь не хватает, - это сделать некоторые утверждения, чтобы гарантировать, что массивы, которые не могут быть преобразованыне конвертированы неправильно.Основная проверка, которую вы делаете, состоит в том, что число не одно целых чисел в форме меньше или равно единице.Это может быть сделано с помощью:

assert sum(i != 1 for i in x1.shape) <= 1

Эта проверка вместе с .reshape позволяет вам применять свою логику ко всем массивам с numpy.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...