Справедливо ли предположить, что вы не пробовали этот код построчно, просматривая результаты в процессе?
Вы не предоставили файл csv
, но loadtxt
назвал этоway может создать только 2d массив с плавающей точкой, поэтому давайте смоделируем это с помощью np.ones
:
In [637]: data1 = np.ones((10,10))
Такой массив имеет атрибут data
, который является memoryview
:
In [638]: data1.data
Out[638]: <memory at 0x7fc5b6916c18>
У него нет атрибута target
.У вашего csv
могут быть столбцы с такими именами (но вы не читали заголовок), но этот loadtxt
не загружал их таким образом.
In [639]: data1.target
---------------------------------------------------------------------------
AttributeError Traceback (most recent call last)
<ipython-input-639-43b9ce1927aa> in <module>()
----> 1 data1.target
AttributeError: 'numpy.ndarray' object has no attribute 'target'
Но давайте вернемся к вашей ошибке..data
имеет len
точно так же, как data1
, поэтому indices
работает:
In [640]: indices = np.random.permutation(len(data1.data))
In [641]: indices
Out[641]: array([0, 7, 6, 4, 8, 5, 2, 1, 9, 3])
In [642]: split = round(len(indices) * 0.8)
In [643]: split
Out[643]: 8
In [644]: indices[:split]
Out[644]: array([0, 7, 6, 4, 8, 5, 2, 1])
Но memoryview
нельзя индексировать с помощью среза:
In [645]: data1.data[indices[:split]]
---------------------------------------------------------------------------
TypeError Traceback (most recent call last)
<ipython-input-645-b6cf2f74578c> in <module>()
----> 1 data1.data[indices[:split]]
TypeError: only integer scalar arrays can be converted to a scalar index
2d массив может быть проиндексирован с помощью этого фрагмента:
In [646]: data1[indices[:split]]
Out[646]:
array([[1., 1., 1., 1., 1., 1., 1., 1., 1., 1.],
[1., 1., 1., 1., 1., 1., 1., 1., 1., 1.],
[1., 1., 1., 1., 1., 1., 1., 1., 1., 1.],
[1., 1., 1., 1., 1., 1., 1., 1., 1., 1.],
[1., 1., 1., 1., 1., 1., 1., 1., 1., 1.],
[1., 1., 1., 1., 1., 1., 1., 1., 1., 1.],
[1., 1., 1., 1., 1., 1., 1., 1., 1., 1.],
[1., 1., 1., 1., 1., 1., 1., 1., 1., 1.]])
Таким образом, корень проблемы в том, что data1.data
и data1.target
являются полезными выражениями.Фактически вы не загрузили ожидаемый объект данных или каким-либо образом.А ты не проверял data1
.