Nie użyłem wcześniej PackedArray, ale zacząłem patrzeć na ich używanie, czytając dzisiaj pewną dyskusję na ich temat.Na PackedArray, szukając porady, jak z nich korzystać
To, co mam, to dużo dużych rozmiarów matryc 1D i 2D wszystkich reali, i bez symbolicznych (jest to skończona różnica PDE), więc pomyślałem, że powinienem skorzystać z użycia PackedArray.
Mam funkcję inicjalizacji, w której przydzielam wszystkie potrzebne dane/siatki. Więc poszedłem i użyłem na nich ToPackedArray
. Wydaje się nieco szybszy, ale muszę wykonać więcej testów wydajności, aby lepiej porównać prędkość przed i po, a także porównać wykorzystanie pamięci RAM.
Ale gdy patrzyłem na to, zauważyłem, że niektóre operacje w M automatycznie zwracają listy w PackedArray już, a niektóre nie.
Na przykład ten nie zwrot pakowane tablica
a = Table[RandomReal[], {5}, {5}];
Developer`PackedArrayQ[a]
Ale to robi
a = RandomReal[1, {5, 5}];
Developer`PackedArrayQ[a]
i to robi
a = Table[0, {5}, {5}];
b = ListConvolve[ {{0, 1, 0}, {1, 4, 1}, {0, 1, 1}}, a, 1];
Developer`PackedArrayQ[b]
a także matryca mnożenie powoduje zwrotny w zapakowanych tablicy
a = Table[0, {5}, {5}];
b = a.a;
Developer`PackedArrayQ[b]
But elementu mnożenie nie
b = a*a;
Developer`PackedArrayQ[b]
Moje pytanie: Czy istnieje lista gdzieś której dokumenty powrócić polecenia M PackedArray kontra nie? (zakładając, że dane spełniają wymagania, takie jak rzeczywisty, niezmieszany, bez symbolicznego itd.).
Co więcej, mniej istotne pytanie, czy lepiej będzie najpierw sprawdzić, czy stworzona lista/macierz jest już zapakowana przed dzwonieniem pod numer ToPackedArray
? Myślę, że wywołanie ToPackedArray
na już zapakowanej liście nie będzie kosztować niczego, ponieważ połączenie natychmiast wróci.
Dzięki,
aktualizacji (1)
Chciałem tylko wspomnieć, że właśnie odkryli, że symbole PackedArray niedozwolone w CDF demo jak mam błąd podczas przesyłania jednego z nich. Musiałem więc usunąć cały mój kod pakowania. Ponieważ piszę głównie dema, teraz ten temat jest dla mnie akademicki. Ale chciał podziękować wszystkim za czas i dobre odpowiedzi.
Czy możesz opracować nieco o symbole PackedArray niedozwolone w demo CDF. Może z przykładem? Myślę, że to jest interesujące. –
Cześć, właśnie zrobiłem małą wersję demonstracyjną (arkusz stylów demonstracyjnych itp.) I właśnie zrobiłem małą manipulację i użyłem w niej czegoś takiego jak 'ToPackedArray [Table [0, {10}]]], a następnie przesłałem to moje Obszar tworzenia WRI do generowania demo CDF, ale program do przesyłania WRI (który weryfikuje pliki demonstracyjne przed przesłaniem) odrzucił je, mówiąc, że symbol 'PackedArray' nie jest dozwolony. Zasadniczo ten pakiet nie może być używany w demach. Możesz spróbować sam. Jestem pewien, że istnieją dobre powody, dla których bezpieczeństwo, wsparcie itp., Ale najważniejsze, że PackedArray nie może być użyty w demonstracji WRI przynajmniej na razie – Nasser
ok, więc wygląda na to, że to raczej ekranizacja wolframowa niż całkowite zablokowanie tej funkcji w CDF. Wydaje się to jednak dziwne. –