При преобразовании списка в массив лучше использовать np.array () или np.asarray () [duplicate]

Если вы также хотите получить значение кнопки.

Java:

WebSettings ws = wv.getSettings();
ws.setJavaScriptEnabled(true);
wv.addJavascriptInterface(new Object()
{
   @JavascriptInterface           // For API 17+
   public void performClick(String strl)
   {
      stringVariable = strl;
      Toast.makeText (YourActivity.this, stringVariable, Toast.LENGTH_SHORT).show();
   }
}, "ok");

HTML:

<button type="button" value="someValue" onclick="ok.performClick(this.value);">OK</button>
166
задан Benjamin Hodgson 19 November 2015 в 00:39
поделиться

5 ответов

Определение asarray :

def asarray(a, dtype=None, order=None):
    return array(a, dtype, copy=False, order=order)

. Это похоже на array, за исключением того, что у него меньше вариантов и copy=False. По умолчанию array имеет copy=True.

Основное отличие состоит в том, что array (по умолчанию) сделает копию объекта, а asarray не будет, если это необходимо.

174
ответ дан unutbu 15 August 2018 в 23:51
поделиться
  • 1
    Итак, когда мы должны использовать их? Если создать массив с нуля, что лучше, array([1, 2, 3]) или asarray([1, 2, 3])? – endolith 3 June 2014 в 00:25
  • 2
    @endolith: [1, 2, 3] является списком Python, поэтому необходимо создать копию данных для создания ndarary. Поэтому используйте np.array непосредственно вместо np.asarray, который отправит параметр copy=False в np.array. copy=False игнорируется, если копия должна быть сделана так, как в этом случае. Если вы сравниваете два, используя %timeit в IPython, вы увидите разницу для небольших списков, но вряд ли это имеет значение для больших списков. – unutbu 3 June 2014 в 00:43
  • 3
    Это имеет смысл и для имен методов: & quot; asarray & quot ;: Рассматривайте это как массив (inplace), т. Е. Вы просто меняете свое представление на этот список / массив. «array»: Фактически преобразуйте это в новый массив. – denvar 4 May 2016 в 18:41
  • 4
    как насчет np.asanyarray? – Lee 26 July 2016 в 16:29
  • 5
    @Lee: asarray всегда возвращает ndarray. asanyarray вернет подкласс ndarray, если это то, что было передано ему. Например, np.matrix является подклассом ndarray. Таким образом, np.asanyarray(np.matrix(...)) возвращает ту же матрицу, тогда как np.asarray(np.matrix(...)) преобразует матрицу в ndarray. – unutbu 26 July 2016 в 16:34
3
ответ дан abarnert 5 September 2018 в 23:29
поделиться

Различия упоминаются достаточно четко в документации array и asarray . Различия заключаются в списке аргументов и, следовательно, действии функции, зависящей от этих параметров.

Определения функций:

numpy.array(object, dtype=None, copy=True, order=None, subok=False, ndmin=0)

и

numpy.asarray(a, dtype=None, order=None)

Следующие аргументы - это те, которые могут быть переданы в array, а не asarray, как указано в документации:

copy: bool, optional Если true (по умолчанию), то объект копируется. В противном случае копия будет сделана только в том случае, если __array__ возвращает копию, если obj является вложенной последовательностью или если требуется копия для удовлетворения любых других требований (dtype, order и т. Д.).

subok: bool, optional If True, тогда подклассы будут переданы, иначе возвращаемый массив будет вынужден быть массивом базового класса (по умолчанию).

ndmin: int, необязательный Задает минимальное количество измерений, которое должен иметь результирующий массив. [1]

будут предварительно отложены до формы, необходимые для выполнения этого требования.
12
ответ дан asheeshr 15 August 2018 в 23:51
поделиться

Различие может быть продемонстрировано в этом примере:

  1. сгенерировать матрицу
    >>> A = numpy.matrix(np.ones((3,3)))
    >>> A
    matrix([[ 1.,  1.,  1.],
            [ 1.,  1.,  1.],
            [ 1.,  1.,  1.]])
    
  2. использовать numpy.array для изменения A. Не работает, потому что вы изменяете копию
    >>> numpy.array(A)[2]=2
    >>> A
    matrix([[ 1.,  1.,  1.],
            [ 1.,  1.,  1.],
            [ 1.,  1.,  1.]])
    
  3. , используя numpy.asarray, чтобы изменить A. Он работал, потому что вы сами изменяете A
    >>> numpy.asarray(A)[2]=2
    >>> A
    matrix([[ 1.,  1.,  1.],
            [ 1.,  1.,  1.],
            [ 2.,  2.,  2.]])
    

Надеюсь, что это поможет!

67
ответ дан Bobbie Wu 15 August 2018 в 23:51
поделиться
  • 1
    Наконец кто-то дает пример .. Большое вам спасибо! – CapturedTree 13 March 2017 в 22:52

Вот простой пример, который может продемонстрировать разницу.

Основное отличие состоит в том, что массив будет копировать исходные данные и использовать другой объект, который мы можем изменить в исходном массиве.

import numpy as np
a = np.arange(0.0, 10.2, 0.12)
int_cvr = np.asarray(a, dtype = np.int64)

Содержимое в массиве (a) остается нетронутым, и все же мы можем выполнять любую операцию над данными с использованием другого объекта без изменения содержимого в исходном массиве.

0
ответ дан vivek 15 August 2018 в 23:51
поделиться
Другие вопросы по тегам:

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