«TypeError: len () объекта без размера» при использовании вставки для массивов - PullRequest
0 голосов
/ 18 ноября 2011

цель: вставить строку в массив в заданной позиции индекса (i)

Используемый язык: python с библиотекой numpy

пример:

i=2.0;
a=array([[1,2,3],[2,3,4],[3,4,5],[6,7,8]],dtype=float);
a=insert(a,i,[-1,-1,-1],axis=0);

это дало ошибку: TypeError: len() of unsized object.

Есть идеи?

Ответы [ 3 ]

6 голосов
/ 18 ноября 2011

Если вы посмотрите документацию для insert:

>>> help(insert)

, то обнаружите:

Parameters
----------
arr : array_like
    Input array.
obj : int, slice or sequence of ints
    Object that defines the index or indices before which `values` is
    inserted.
values : array_like
    Values to insert into `arr`. If the type of `values` is different
    from that of `arr`, `values` is converted to the type of `arr`.
axis : int, optional
    Axis along which to insert `values`.  If `axis` is None then `arr`
    is flattened first.

Если посмотреть на то, что вы сделали, то очевидно, что проблема в том, чтоobj должно быть int, slice или последовательностью целых чисел, а не с плавающей точкой (i = 2.0).

Ваш пример не выдаст ошибку, если вы установите i=2.Я не знаю, хотите ли вы этого, потому что вы не указали желаемый результат.

1 голос
/ 13 октября 2015

Следует отметить, что numpy версия 1.8.1 выполняет неявное приведение к int и, следовательно, не вызывает эту ошибку для кода OP!

>>> import numpy as np
>>> np.__version__
1.8.1

код ОП -

>>> i = 2.0;
>>> a = np.array([[1,2,3],[2,3,4],[3,4,5],[6,7,8]],dtype=float);
>>> a = np.insert(a,i,[-1,-1,-1],axis=0);


>>> a 
array([[ 1.,  2.,  3.],
       [ 2.,  3.,  4.],
       [-1., -1., -1.],
       [ 3.,  4.,  5.],
       [ 6.,  7.,  8.]])
0 голосов
/ 20 ноября 2011

Я нашел ошибку. Он выдавал ошибку, я = 2,0 является индексом, а также с плавающей точкой, которая путает Python

решение состоит в том, чтобы типизировать атрибут индекса вставки () как int

, что соответствует примеру вопроса:

КОД:

i=int(2.0);     # TYPE CASTED AS INT

a=array([[1,2,3],[2,3,4],[3,4,5],[6,7,8]],dtype=float);

a=insert(a,i,[-1,-1,-1],axis=0);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...