Краткий вектор, добавляющий в Python? [дубликат]

Если вы не можете установить width/max-width для контейнера, я предполагаю, что вы все равно можете установить max-width в parent (левая панель) в container. Если да, вы можете попробовать установить max-height:inherit на container после установки max-width на левой панели.

    <html>
    <body style="display: flex">


  <!-- left panel -->
  <div style="flex: 2; max-height:100px">
    <!-- scrollable container, no effect -->
  	<div style="overflow: scroll;max-height:inherit;">
            <!-- big child content div -->
            <div style="width: 800px; height: 200px; background: red"></div>
        </div>
  </div>

  <!-- vertical divider -->
  <div style="width: 1px; background: blue">

  <!-- right panel -->
  <div style="flex: 3">
    right panel content
  </div>


<script type="text/javascript">
    
</script>

</div><div class="as-console-wrapper"><div class="as-console"></div></div></body>
    </html>

37
задан Johan Kotlinski 10 May 2009 в 22:11
поделиться

9 ответов

Я не думаю, что вы найдете более быстрое решение, чем 3 суммы, предложенные в вопросе. Преимущества numpy видны с большими векторами, а также если вам нужны другие операторы. numpy особенно полезен с матрицами, ведь это уловка, связанная со списками python.

Тем не менее, еще один способ сделать это: D

In [1]: a = [1,2,3]

In [2]: b = [2,3,4]

In [3]: map(sum, zip(a,b))
Out[3]: [3, 5, 7]

Изменить : вы также можете использовать izip из itertools, генераторную версию zip

In [5]: from itertools import izip

In [6]: map(sum, izip(a,b))
Out[6]: [3, 5, 7]
36
ответ дан 27 November 2019 в 04:02
поделиться

Если вам нужна эффективная векторная арифметика, попробуйте Numpy .

>>> import numpy
>>> a=numpy.array([0,1,2])
>>> b=numpy.array([3,4,5])
>>> a+b
array([3, 5, 7])
>>> 

Или (спасибо, Эндрю Джаффе),

>>> a += b
>>> a
array([3, 5, 7])
>>> 
38
ответ дан 27 November 2019 в 04:02
поделиться

Хотя Numeric превосходен, а решения для понимания списков подходят, если вы действительно хотите создать новый список, я удивлен, что никто не предложил «один очевидный способ сделать это» - простой для цикла ! Лучшее:

for i, bi in enumerate(b): a[i] += bi

Также хорошо, вроде как:

for i in xrange(len(a)): a[i] += b[i]
33
ответ дан 27 November 2019 в 04:02
поделиться

Как насчет этого:

a = [x+y for x,y in zip(a,b)]
12
ответ дан 27 November 2019 в 04:02
поделиться

Или, если вы хотите использовать внешнюю библиотеку (и массивы фиксированной длины), используйте numpy , в котором есть «+ =» и связанные операции для in -place operations.

import numpy as np
a = np.array([0, 1, 2])
b = np.array([3, 4, 5])
a += b
7
ответ дан 27 November 2019 в 04:02
поделиться

[a [x] + b [x] для x в диапазоне (0, len (a))]

3
ответ дан 27 November 2019 в 04:02
поделиться

Вы можете создать функцию, которая получает размер массива, просматривает его и создает возвращаемый массив, который она возвращает.

0
ответ дан 27 November 2019 в 04:02
поделиться

Если вы думаете, что Numpy излишни, это должно быть очень быстро, потому что этот код работает на чистом C ( map () и __ add __ () оба напрямую реализованы в C):

a = [1.0,2.0,3.0]
b = [4.0,5.0,6.0]

c = map(float.__add__, a, b)

Или, если вы не знаете типы в списке:

import operator
c = map(operator.add, a, b)
18
ответ дан 27 November 2019 в 04:02
поделиться

Улучшение (меньшее потребление памяти) списка понимания

import itertools a = [x + y for x, y в itertools.izip (a, b)]

На самом деле, если вы не уверены, что a будет потреблять, я бы даже использовал выражение генератора:

(x + y для x, y в itertools.izip (a, b))

0
ответ дан 27 November 2019 в 04:02
поделиться
Другие вопросы по тегам:

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