Как я создаю пустой массив / матрица в NumPy?

Вам не хватает типов данных для столбцов в таблице temp_update_table.

CREATE TABLE temp_update_table (
    entity_id INT,
    rate INT,
    INDEX (entity_id)
);

Также неплохо добавить индекс для столбца, используемого в соединении.

Поскольку в вашем CSV-файле есть строка заголовка, которую следует пропустить, вам необходимо использовать предложение IGNORE.

LOAD DATA INFILE 'sr.csv' 
INTO TABLE temp_update_table 
FIELDS TERMINATED BY ',' 
IGNORE 1 LINES
(entity_id, rate); 
277
задан MERose 30 December 2014 в 08:33
поделиться

3 ответа

У Вас есть неправильная умственная модель для использования NumPy эффективно. Массивы NumPy хранятся в непрерывных блоках памяти. Если Вы хотите добавить строки или столбцы к существующему массиву, целый массив должен быть скопирован в новый блок памяти, создав разрывы для новых элементов, которые будут сохранены. Это очень неэффективно, если делается неоднократно для создания массива.

В случае добавляющих строк, Ваш лучший выбор состоит в том, чтобы создать массив, который является столь большим, как Ваш набор данных в конечном счете будет и затем добавит данные к нему строка строкой:

>>> import numpy
>>> a = numpy.zeros(shape=(5,2))
>>> a
array([[ 0.,  0.],
   [ 0.,  0.],
   [ 0.,  0.],
   [ 0.,  0.],
   [ 0.,  0.]])
>>> a[0] = [1,2]
>>> a[1] = [2,3]
>>> a
array([[ 1.,  2.],
   [ 2.,  3.],
   [ 0.,  0.],
   [ 0.,  0.],
   [ 0.,  0.]])
394
ответ дан Peter Mortensen 23 November 2019 в 02:06
поделиться

Массив NumPy является совсем другой структурой данных из списка и разработан, чтобы использоваться по-разному. Ваше использование hstack потенциально очень неэффективно... каждый раз, когда Вы называете его, все данные в существующем массиве копируются в новый. (Эти append функция будет иметь ту же проблему.), Если Вы хотите создать свою матрицу один столбец за один раз, Вы могли бы быть лучшими прочь для хранения его в списке, пока это не закончено, и только затем преобразуйте его в массив.

, например,


mylist = []
for item in data:
    mylist.append(item)
mat = numpy.array(mylist)

item может быть список, массив или любой повторяемый, пока у каждого item есть то же число элементов.
В данном случае (data некоторое повторяемое содержание столбцы матрицы) можно просто использовать


mat = numpy.array(data)

(Также отмечают, что с помощью list, поскольку имя переменной является, вероятно, не хорошей практикой, так как это маскирует встроенный тип тем именем, которое может привести к ошибкам.)

РЕДАКТИРОВАНИЕ:

, Если по некоторым причинам Вы действительно хотите создать пустой массив, можно просто использовать numpy.array([]), но это редко полезно!

87
ответ дан Peter Mortensen 23 November 2019 в 02:06
поделиться

Можно использовать добавлять функцию. Для строк:

>>> from numpy import *
>>> a = array([10,20,30])
>>> append(a, [[1,2,3]], axis=0)
array([[10, 20, 30],      
       [1, 2, 3]])

столбцы For:

>>> append(a, [[15],[15]], axis=1)
array([[10, 20, 30, 15],      
       [1, 2, 3, 15]])
<час>

РЕДАКТИРОВАНИЕ
, Конечно, как упомянуто в других ответах, если Вы не делаете некоторую обработку (напр. инверсия) на матрице/массиве КАЖДЫЙ раз, когда Вы добавляете что-то к нему, я просто создал бы список, добавил бы к ней, затем преобразовывают его в массив.

6
ответ дан pradyunsg 23 November 2019 в 02:06
поделиться
Другие вопросы по тегам:

Похожие вопросы: