Устройте свой макет таким образом, чтобы существовало div, и единственное задание этого div должно диктовать и быть размером, которым вы хотите, чтобы быть холстом.
var canvas = document.createElement('canvas');
canvas.width = div.clientWidth;
canvas.height = div.clientHeight;
Затем добавьте холст в div.
В принципе, списки Python очень гибкие и могут содержать полностью гетерогенные, произвольные данные и могут быть добавлены очень эффективно в амортизированном постоянном времени . Если вам нужно сжиматься и наращивать свой массив эффективно и без хлопот, это путь. Но они используют намного больше пространства, чем массивы C.
Тип array.array
, с другой стороны, является просто тонкой оболочкой на массивах C. Он может содержать только однородные данные, все одного типа, и поэтому он использует только sizeof(one object) * length
байт памяти. В основном, вы должны использовать его, когда вам нужно выставить массив C на расширение или системный вызов (например, ioctl
или fctnl
).
array.array
также является разумным способом представления изменчивой строки в Python 2.x (array('B', bytes)
). Однако Python 3.x предлагает переменную строку byte как bytearray
.
Однако, если вы хотите сделать математику в однородном массиве числовые данные, то вам намного лучше использовать NumPy, который может автоматически векторизовать операции над сложными многомерными массивами.
Короче говоря: array.array
полезна, когда вам нужен однородный C массив данных по причинам , кроме выполнения математики .
Если вы собираетесь использовать массивы, рассмотрите пакеты numpy или scipy, которые дают вам массивы с большей гибкостью.
Мое понимание заключается в том, что массивы хранятся более эффективно (т. е. как непрерывные блоки памяти против указателей на объекты Python), но я не знаю о преимуществах производительности. Кроме того, с массивами вы должны хранить примитивы одного типа, тогда как списки могут хранить что угодно.
Модуль массива - это одна из тех вещей, которые вам, вероятно, не нужны, если вы не знаете, зачем их использовать (и обратите внимание, что я не пытаюсь сказать это в снисходительном образом!). В большинстве случаев модуль массива используется для взаимодействия с кодом C. Чтобы дать вам более прямой ответ на ваш вопрос о производительности:
Массивы более эффективны, чем списки для некоторых видов использования. Если вам нужно выделить массив, который вы НЕ ЗНАЕТЕ, то массивы могут быть быстрее и использовать меньше памяти. GvR имеет оптимизационный анекдот , в котором модуль массива выступает победителем (долго читается, но стоит того).
С другой стороны, часть причины, почему перечислены есть больше памяти, чем массивы, потому что python выделяет несколько дополнительных элементов, когда все выделенные элементы будут использоваться. Это означает, что добавление элементов в списки выполняется быстрее. Поэтому, если вы планируете добавлять элементы, список - это путь.
TL; DR Я бы использовал массив только в том случае, если у вас была исключительная потребность в оптимизации, или вам нужно взаимодействовать с кодом C (и не может использовать pyrex ).
Для почти всех случаев правильный список является правильным выбором. Модуль массивов больше похож на тонкую оболочку над массивами C, которые предоставляют вам типы строго типизированных контейнеров (см. docs ), с доступом к более C-подобным типам, таким как short / double с подписью / без знака, которые не являются частью встроенных типов. Я бы сказал, использовать модуль массивов, только если вам это действительно нужно, во всех остальных случаях придерживаться списков.
array
Python не предназначен для выполнения математики . Если вы попробуете NumPy ndarray
для суммирования массива из 10 ^ 8 чисел, он полностью ударит list
. @tzot имеет правильное представление о том, почему встроенный array
медленный для математики.
– Dan Lenski
28 August 2014 в 07:46
Стандартные библиотечные массивы полезны для двоичного ввода-вывода, например, перевод списка int в строку для записи, скажем, в волновой файл. Тем не менее, как многие уже отмечали, если вы собираетесь выполнять какую-либо реальную работу, вам следует рассмотреть возможность использования NumPy.
Массив может использоваться только для определенных типов, тогда как списки могут использоваться для любого объекта.
Массивы могут также содержать только данные одного типа, тогда как список может иметь записи различных типов объектов.
Массивы также более эффективны для некоторых численных вычислений.
Это компромисс!
blockquote>профи каждого из них:
list
- flexible
- может быть гетерогенным
array (ex: numpy array)
- массив однородных значений
- однородный
- компактный (по размеру)
- эффективный (функциональность и скорость)
- удобный
Важное различие между массивом numpy и списком состоит в том, что срезы массива представляют собой представления исходного массива. Это означает, что данные не копируются, и любые изменения в представлении будут отражены в исходном массиве.
sizeof(element)
× (количество элементов), а также небольшой фиксированный заголовок для накладных расходов. Тем не менее, ndarray имеет некоторые дополнительные возможности для работы с несмежными и разреженными массивами, и я думаю, что некоторые подключаемые стратегии для распределения памяти для больших массивов ... некоторые из этих расширенных функций сделают ее пользовательской меньше i> памятью, тогда как другие повысят производительность, используя память more i>. – Dan Lenski 29 October 2014 в 05:57bytearray
, возможно, стоит уточнить формулировку в вашем ответе – Chris_Rands 5 June 2018 в 08:06