Vra

As jy die skep van 'n 1d verskeidenheid in Python is daar enige voordeel vir die gebruik van die Numpy pakket?

Was dit nuttig?

Oplossing

Dit hang alles af van wat jy van plan is om te doen met die skikking. As alles wat jy doen, is die skep van skikkings van eenvoudige datatipes en doen I / O, die verskeidenheid module sal dit ook goed doen.

As, aan die ander kant, wat jy wil enige soort van numeriese berekeninge te doen, het die skikking module nie enige hulp met wat. Numpy (en Scipy ) gee jou 'n wye verskeidenheid van bedrywighede tussen skikkings en spesiale funksies wat nuttig nie net vir wetenskaplike werk, maar vir dinge soos gevorderde beeld manipulasie of in die algemeen enigiets waar jy nodig het om doeltreffend berekeninge met groot hoeveelhede data is.

Numpy is ook baie meer buigsaam, bv dit word ondersteun deur skikkings van enige tipe van 'n afgestorwene voorwerpe, en is ook in staat om "native" met jou eie voorwerpe as hulle voldoen aan die skikking koppelvlak .

Ander wenke

Klein Opstarten vir die voordeel van elkeen hierdie dalk nuttig vind (as gevolg van die uitstekende antwoord deur @dF.):

import numpy as np
from array import array

# Fixed size numpy array
def np_fixed(n):
    q = np.empty(n)
    for i in range(n):
        q[i] = i
    return q

# Resize with np.resize
def np_class_resize(isize, n):
    q = np.empty(isize)
    for i in range(n):
        if i>=q.shape[0]:
            q = np.resize(q, q.shape[0]*2)        
        q[i] = i
    return q    

# Resize with the numpy.array method
def np_method_resize(isize, n):
    q = np.empty(isize)
    for i in range(n):
        if i>=q.shape[0]:
            q.resize(q.shape[0]*2)
        q[i] = i
    return q

# Array.array append
def arr(n):
    q = array('d')
    for i in range(n):
        q.append(i)
    return q

isize = 1000
n = 10000000

Die uitset gee:

%timeit -r 10 a = np_fixed(n)
%timeit -r 10 a = np_class_resize(isize, n)
%timeit -r 10 a = np_method_resize(isize, n)
%timeit -r 10 a = arr(n)

1 loop, best of 10: 868 ms per loop
1 loop, best of 10: 2.03 s per loop
1 loop, best of 10: 2.02 s per loop
1 loop, best of 10: 1.89 s per loop

Dit blyk dat array.array is effens vinniger en die "api" red jy 'n paar probleme, maar as jy meer as net die stoor dubbelspel moet dan is numpy.resize nie 'n slegte keuse immers (indien dit korrek gebruik word).

Gelisensieer onder: CC-BY-SA met toeskrywing
Nie verbonde aan StackOverflow
scroll top