Почему я вижу только одну букву вместо "куб" Когда я не набирал dtype="str", это работало. Мой вопрос: почему?
код:
np.full((3,3,3),"cube",dtype=str)
Результаты:
array([[['c', 'c', 'c'],
['c', 'c', 'c'],
['c', 'c', 'c']],
[['c', 'c', 'c'],
['c', 'c', 'c'],
['c', 'c', 'c']],
[['c', 'c', 'c'],
['c', 'c', 'c'],
['c', 'c', 'c']]], dtype='<U1')
Вы можете установить dtype на самую большую строку, которую вы ожидаете для своего массива. Если это будет строка, например, длиной 34, используйте dtype='<U34`. Это потребует потенциально большого объема зарезервированной памяти, это компромисс. В противном случае вы также можете использовать dtype=object для более общего элемента (размера), хранящегося в каждом элементе массива.






Это должно работать
import numpy as np
np.full((3,3,3),"cube",dtype='U4')
np.full((3,3,3),"cube",dtype=str)
эквивалентно
np.full((3,3,3),"cube",dtype='U1')
Он просто возьмет первый элемент строки.
Вы можете получить полный результат:
np.full((3,3,3),"cube",dtype=object)
или
np.full((3,3,3),"cube",dtype='U4') # U4 as you have 4 letters in cube, you can do any U>4 like U5, U6, etc.
или просто удалите dtype=str. После удаления он займет всю длину строки.
np.full((3,3,3),"cube")
Чувак, просто удали ( dtype : это необязательно).
Код :
np.full( (3,3,3), "cube" )
Синтаксис:
numpy.full(shape, fill_value, dtype=None, order='C')
Часть исходного кода для full (см. ссылку [источник] в документах):
if dtype is None:
fill_value = asarray(fill_value)
dtype = fill_value.dtype
a = empty(shape, dtype, order)
multiarray.copyto(a, fill_value, casting='unsafe')
np.asarray может вывести тип dtype «U4» для значения заполнения «куб».
Но np.empty(shape, 'str') создает dtype «U1». В нем нет информации о fill_value.
Вот почему без вашего dtype он делает вывод, что ему нужна достаточно большая строка для хранения 4 символов, но без этого он просто выделяет место для 1 символа.
Некоторые ответы можно найти здесь