Почему полная функция в NumPy не может принимать dtype=str

Почему я вижу только одну букву вместо "куб" Когда я не набирал 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')

Некоторые ответы можно найти здесь

rochard4u 06.07.2023 15:18

Вы можете установить dtype на самую большую строку, которую вы ожидаете для своего массива. Если это будет строка, например, длиной 34, используйте dtype='<U34`. Это потребует потенциально большого объема зарезервированной памяти, это компромисс. В противном случае вы также можете использовать dtype=object для более общего элемента (размера), хранящегося в каждом элементе массива.

9769953 06.07.2023 15:31
Почему в Python есть оператор "pass"?
Почему в Python есть оператор "pass"?
Оператор pass в Python - это простая концепция, которую могут быстро освоить даже новички без опыта программирования.
Некоторые методы, о которых вы не знали, что они существуют в Python
Некоторые методы, о которых вы не знали, что они существуют в Python
Python - самый известный и самый простой в изучении язык в наши дни. Имея широкий спектр применения в области машинного обучения, Data Science,...
Основы Python Часть I
Основы Python Часть I
Вы когда-нибудь задумывались, почему в программах на Python вы видите приведенный ниже код?
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
Алиса и Боб имеют неориентированный граф из n узлов и трех типов ребер:
Оптимизация кода с помощью тернарного оператора Python
Оптимизация кода с помощью тернарного оператора Python
И последнее, что мы хотели бы показать вам, прежде чем двигаться дальше, это
Советы по эффективной веб-разработке с помощью Python
Советы по эффективной веб-разработке с помощью Python
Как веб-разработчик, Python может стать мощным инструментом для создания эффективных и масштабируемых веб-приложений.
1
2
55
4
Перейти к ответу Данный вопрос помечен как решенный

Ответы 4

Это должно работать

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 символа.

Другие вопросы по теме