У меня есть два простых одномерных массива в NumPy . Я должен быть в состоянии объединить их, используя numpy.concatenate . Но я получаю эту ошибку для кода ниже:
TypeError: только массивы длины 1 могут быть преобразованы в скаляры Python
Код
import numpy
a = numpy.array([1, 2, 3])
b = numpy.array([5, 6])
numpy.concatenate(a, b)
Зачем?
python
arrays
numpy
concatenation
numpy-ndarray
высокая пропускная способность
источник
источник
np.concatenat(..., axis)
. Если вы хотите сложить их вертикально, используйтеnp.vstack
. Если вы хотите разместить их (в несколько массивов) горизонтально, используйтеnp.hstack
. (Если вы хотите сложить их по глубине, например, в третьем измерении, используйтеnp.dstack
). Обратите внимание, что последние похожи на пандpd.concat
Ответы:
Строка должна быть:
Массивы, которые вы хотите объединить, должны передаваться как последовательность, а не как отдельные аргументы.
Из документации NumPy :
Он пытался интерпретировать ваш параметр
b
как ось, поэтому он жаловался, что не может преобразовать его в скаляр.источник
numpy.concatenate(a1, a2, a3)
или,numpy.concatenate(*[a1, a2, a3])
если хотите. Python достаточно гибок, чтобы в конечном итоге разница выглядела скорее косметической, чем существенной, но это хорошо, когда API согласован (например, если все простые функции, которые принимают списки аргументов переменной длины, требуют явных последовательностей).def concatx(*sequences, **kwargs)
). Это не идеально, так как вы не можете назвать ключевые слова args явно в подписи таким образом, но есть обходные пути.Существует несколько возможностей объединения 1D-массивов, например:
Все эти параметры одинаково быстры для больших массивов; для маленьких
concatenate
имеет небольшое преимущество:Сюжет создан с перфплотом :
источник
np.concatenate
. Они просто массируют входной список различными способами перед рукой.np.stack
например, добавляет дополнительное измерение ко всем входным массивам. Посмотрите на их исходный код. Толькоconcatenate
компилируется.np.concatenate
копирует входные данные. Эта память и затраты времени тогда перевешивают время, потраченное на «массаж» ввода.Первый параметр, который
concatenate
должен сам по себе быть последовательностью массивов для объединения:источник
Альтернативой является использование краткой формы «concatenate», которая называется «r _ [...]» или «c _ [...]», как показано в примере кода ниже (см. Http://wiki.scipy.org / NumPy_for_Matlab_Users для дополнительной информации):
Что приводит к:
источник
vector_b = [1,1,1,1] #short form of "array"
, Это просто неправда. vector_b будет стандартным типом списка Python. Numpy, однако, довольно хорошо принимает последовательности вместо того, чтобы заставлять все входные данные быть типами numpy.array.Вот больше подходов для этого с помощью
numpy.ravel()
,numpy.array()
используя тот факт, что одномерные массивы могут быть распакованы в простые элементы:источник
Еще несколько фактов из NumPy документов :
С синтаксисом как
numpy.concatenate((a1, a2, ...), axis=0, out=None)
ось = 0 для послойной конкатенации
Я надеюсь, что это помогает !
источник