Случайный выбор элемента из списка списков дает ValueError
У меня есть функция, которая иногда дает мне список списков, где вложенные списки иногда имеют только один элемент, такой как этот:
a = [['1'], ['3'], ['w']]
И хотите случайным образом выбрать один элемент из этого основного списка a
, Если я попытаюсь использовать np.random.choice
в этом списке я получаю ValueError: a must be 1-dimensional
,
Но если бы список был вместо:
b = [['1'], ['3'], ['w', 'w']]
Затем с помощью np.random.choice
отлично работает Почему это? И как я могу сделать так, чтобы я мог случайным образом выбирать из обоих типов списков?
2 ответа
Я думаю choice
сначала превращает ваш список в массив.
Во втором случае этот массив является 1d-массивом с объектом dtype:
In [125]: np.array([['1'], ['3'], ['w', 'w']])
Out[125]: array([['1'], ['3'], ['w', 'w']], dtype=object)
In [126]: _.shape
Out[126]: (3,)
Во втором он создает двухмерный массив строк:
In [127]: np.array([['1'], ['3'], ['w']])
Out[127]:
array([['1'],
['3'],
['w']],
dtype='<U1')
In [128]: _.shape
Out[128]: (3, 1)
Это проблема, которая периодически возникает. np.array
пытается создать как можно больший размерный массив, насколько позволяет вход.
Чтобы ответить на часть "как заставить это работать", вы можете использовать:
np.random.choice(np.squeeze(a))
Обратите внимание, что это устранит квадратные скобки для a
, но не для b
, Но все еще может быть полезным.