Ваше использование автоматических свойств подразумевает, что Вам не нужна никакая логика получения/установки для свойства таким образом, частная переменная поддержки является ненужной.
не используют автоматические свойства, если у Вас есть какая-либо сложная логика в Вашем классе. Просто пойдите private int _age
и нормальные методы get/методы set, как Вы обычно были бы.
IMO, автоматические свойства больше подходят для того, чтобы быстро реализовать холостые объекты или временные капсулы данных как:
public class TempMessage {
public int FromID { get; set; }
public int ToID { get; set; }
public string Message { get; set; }
}
, Где Вам не нужно много логики.
Вы можете изменять размер numpy массивов на месте. Это быстрее, чем преобразование в списки, а затем обратно в массивы numpy, и при этом также используется меньше памяти.
print (r.shape)
# (4,)
r.resize(5)
print (r.shape)
# (5,)
r[-1] = (5,'cc',43.0)
print(r)
# [(1, 'a', 1.1000000000000001)
# (2, 'dd', 2.0)
# (3, 'xyz', 3.0)
# (4, '12', 4.0)
# (5, 'cc', 43.0)]
Если памяти недостаточно для расширения массива на месте, операция изменения размера (или добавления) может заставить NumPy выделить место для совершенно нового массива и скопируйте старые данные в новое место. Это, естественно, довольно медленно, поэтому по возможности старайтесь избегать использования resize
или append
. Вместо этого предварительно выделяйте массивы достаточного размера с самого начала (даже если они несколько больше, чем в конечном итоге необходимо).
np.core.records.fromrecords(r.tolist()+[(5,'cc',43.)])
Тем не менее, он разбивается, на этот раз по строкам. Может лучше?