Knowledge

Array programming

Source šŸ“

143:
notation from the difficulty of mastering its implications. For example, learning the rules for computing a matrix product is easy, but a mastery of its implications (such as its associativity, its distributivity over addition, and its ability to represent linear functions and geometric operations) is a different and much more difficult matter.
2058:
it is important to distinguish the difficulty of describing and of learning a piece of notation from the difficulty of mastering its implications. For example, learning the rules for computing a matrix product is easy, but a mastery of its implications (such as its associativity, its distributivity
151:
Users of computers and programming languages are often concerned primarily with the efficiency of execution of algorithms, and might, therefore, summarily dismiss many of the algorithms presented here. Such dismissal would be short-sighted since a clear statement of an algorithm can usually be used
142:
The thesis is that the advantages of executability and universality found in programming languages can be effectively combined, in a single coherent language, with the advantages offered by mathematical notation. it is important to distinguish the difficulty of describing and of learning a piece of
2059:
over addition, and its ability to represent linear functions and geometric operations) is a different and much more difficult matter. Indeed, the very suggestiveness of a notation may make it seem harder to learn because of the many properties it suggests for explorations.
1973:
However, these solutions are neither the most concise ones (e.g. still remains the need to notationally differentiate overdetermined systems) nor the most computationally efficient. The latter point is easy to understand when considering again the scalar equivalent
566:
would have an extremely hard time amalgamating two or more apparently disparate functions which might appear in different program sections or sub-routines, even though a programmer could do this easily, aggregating sums on the same pass over the array to minimize
514:
While scalar languages like C do not have native array programming elements as part of the language proper, this does not mean programs written in these languages never take advantage of the underlying techniques of vectorization (i.e., utilizing a CPU's
2042:
This is not only an example of terse array programming from the coding point of view but also from the computational efficiency perspective, which in several array programming languages benefits from quite efficient linear algebra libraries such as
171:
rank in mathematics: functions that operate on data may be classified by the number of dimensions they act on. Ordinary multiplication, for example, is a scalar ranked function because it operates on zero-dimensional data (individual numbers). The
800:'s matrix programming language Mata supports array programming. Below, we illustrate addition, multiplication, addition of a matrix and a scalar, element by element multiplication, subscripting, and one of Mata's many inverse matrix functions. 113:, which implements vector instructions. Array programming primitives concisely express broad ideas about data manipulation. The level of concision can be dramatic in certain cases: it is not uncommon to find array programming language 156:
The basis behind array programming and thinking is to find and exploit the properties of data where individual elements are similar or adjacent. Unlike object orientation which implicitly breaks down data to its constituent parts (or
139:
most programming languages are decidedly inferior to mathematical notation and are little used as tools of thought in ways that would be considered significant by, say, an applied mathematician.
562:
code. (For example, additions of other elements of the same array may be subsequently encountered during the same execution, causing unnecessary repeated lookups.) Even the most sophisticated
1697:
Raku supports the array paradigm via its Metaoperators. The following example demonstrates the addition of arrays @a and @b using the Hyper-operator in conjunction with the plus operator.
1469:
by default. The following example illustrates a process of multiplication of two matrices followed by an addition of a scalar (which is, in fact, a one-element vector) and a vector:
2561: 1804:. The previous statements are also valid MATLAB expressions if the third one is executed before the others (numerical comparisons may be false because of round-off errors). 3308: 2262:
Chatzigeorgiou; Stephanides (2002). "Evaluating Performance and Power Of Object-Oriented Vs. Procedural Programming Languages". In Blieberger; Strohmeier (eds.).
224:
in that one physical processor performs operations on a group of items simultaneously while parallel processing aims to split a larger problem into smaller ones (
129:
model as it allows the programmer to think and operate on whole aggregates of data, without having to resort to explicit loops of individual scalar operations.
2467: 237: 2531: 184:
reduce the dimensionality of an input data array by one or more dimensions. For example, summing over elements collapses the input array by 1 dimension.
523:
at some optimization levels detect and vectorize sections of code that its heuristics determine would benefit from it. Another approach is given by the
2480: 2021:
to maintain the essential part of the analogy with the scalar case, therefore simplifying the mathematical reasoning and preserving the conciseness:
364:
expresses the addition of two numbers. In such languages, adding one array to another requires indexing and looping, the coding of which is tedious.
1576:# t() is a transpose operator  !!this has nrow=2 ... and B has 3 rows --- a clear contradiction to the definition of A 1466: 164: 2324: 2630: 2565: 2106: 635:
This operation works on arrays of any rank (including rank 0), and on a scalar and an array. Dyalog APL extends the original language with
146:
Indeed, the very suggestiveness of a notation may make it seem harder to learn because of the many properties it suggests for explorations.
3301: 2044: 17: 2460: 2130:
StƩfan van der Walt; S. Chris Colbert & Gaƫl Varoquaux (2011). "The NumPy array: a structure for efficient numerical computation".
2403: 38:
refers to solutions that allow the application of operations to an entire set of values at once. Such solutions are commonly used in
2068:
The use of specialized and efficient libraries to provide more terse abstractions is also common in other programming languages. In
2694: 285: 3294: 3044: 2906: 1732:
The matrix left-division operator concisely expresses some semantic properties of matrices. As in the scalar equivalent, if the (
2435: 3401: 3391: 3050: 2076:. In some cases a very terse abstraction in those languages is explicitly influenced by the array programming paradigm, as the 3449: 3406: 3396: 3386: 2453: 2273: 2237: 3467: 3363: 3235: 2983: 125:
The fundamental idea behind array programming is that operations apply at once to an entire set of values. This makes it a
1402:
The inner product between two matrices having the same number of elements can be implemented with the auxiliary operator
225: 558:. Because the additions are performed in isolation from the rest of the coding, they may not produce the optimally most 461:
In array-based languages, for example in Fortran, the nested for-loop above can be written in array-format in one line,
2703: 516: 213: 1429:
is a database-oriented array-programming language. For example, two arrays could be added with the following query:
3378: 3075: 2755: 2699: 1378:
example of the inner product of two arrays can be implemented using the native matrix multiplication operator. If
200:
and compatible CPUs developed and produced after 1997 contained various instruction set extensions, starting from
3358: 2935: 2808: 2739: 2674: 2597: 2384:"Reference for Armadillo 1.1.8. Examples of Matlab/Octave syntax and conceptually corresponding Armadillo syntax" 2263: 1368: 126: 3472: 3438: 3353: 3113: 2876: 2506: 2292: 333: 181: 3368: 2891: 2881: 2659: 2081: 353: 269: 527:
API, which allows one to parallelize applicable sections of code by taking advantage of multiple CPU cores.
3275: 3255: 3185: 3128: 3090: 3080: 3040: 2965: 2901: 2871: 2798: 2787: 2684: 2664: 2639: 2602: 277: 98: 2304: 3230: 2993: 2960: 2855: 2831: 2793: 2773: 2669: 2578: 2556: 2541: 313: 2363: 3427: 3177: 3163: 3070: 3030: 2955: 2861: 2841: 2708: 2587: 2521: 1364: 580: 329: 273: 261: 253: 66: 3270: 3035: 2945: 2925: 2911: 2328: 2085: 50: 3250: 3210: 3153: 3085: 2823: 2654: 349: 321: 309: 281: 257: 233: 193: 90: 70: 3260: 3240: 3181: 3168: 3148: 2975: 2712: 2616: 2574: 2445: 2111: 520: 46: 3220: 3195: 3189: 3133: 3095: 2783: 2778: 2730: 2625: 2526: 2498: 2489: 2054:
Returning to the previous quotation of Iverson, the rationale behind it should now be evident:
2033:      (associativity also holds for matrices, commutativity is no more required) 568: 559: 176:
operation is an example of a vector rank function because it operates on vectors, not scalars.
2265:
Proceedings - 7th International Conference on Reliable Software Technologies - Ada-Europe'2002
3122: 3118: 3060: 3012: 2582: 201: 180:
is an example of a 2-rank function, because it operates on 2-dimensional objects (matrices).
177: 39: 3346: 3317: 3265: 3245: 3205: 3007: 2866: 2735: 2722: 2476: 2149: 2073: 636: 265: 229: 82: 62: 2407: 535:
In array languages, operations are generalized to apply to both scalars and arrays. Thus,
8: 3200: 3138: 2950: 2930: 2916: 2648: 2516: 2511: 2349: 1801: 1426: 563: 135:
described the rationale behind array programming (actually referring to APL) as follows:
2153: 220:, making modern CPUs sophisticated vector processors. Array processing is distinct from 3017: 2970: 2940: 2886: 2745: 2644: 2536: 2288: 2183: 2165: 2139: 305: 221: 158: 132: 102: 58: 54: 3341: 3336: 3173: 3065: 2920: 2896: 2803: 2765: 2750: 2689: 2269: 1393: 114: 2169: 1765: 216:
array capabilities. This has continued into the 2020s with instruction sets such as
3055: 2987: 2851: 2592: 2199: 2157: 1360: 110: 31: 2241: 677:
had MAT statements for matrix and array manipulation in its third edition (1966).
105:. In these languages, an operation that operates on entire arrays can be called a 3286: 3105: 2979: 2845: 2546: 2129: 674: 167:
is an important concept to array programming languages in general, by analogy to
161:
quantities), array orientation looks to group data and apply a uniform handling.
3157: 2813: 2679: 2383: 1745: 1356: 2220: 3461: 3143: 2101: 1987: 1784: 1768: 554:
An array language simplifies programming but possibly at a cost known as the
173: 3331: 45:
Modern programming languages that support array programming (also known as
2204: 2187: 1990:
as the extension of the scalar solution to the matrix case would require:
1336:
language, which extends the original language with augmented assignments:
3025: 2161: 1733: 53:
languages) have been engineered specifically to generalize operations on
2238:"The Data Abstraction Penalty (DAP) Benchmark for Small Objects in Java" 1333: 293: 152:
as a basis from which one may easily derive a more efficient algorithm.
86: 519:
if it has them or by using multiple CPU cores). Some C compilers like
2089: 1407: 94: 2072:
several linear algebra libraries exploit the language's ability to
613:
APL uses single character Unicode symbols with no syntactic sugar.
337: 2475: 2144: 1740:
is not null then it is possible to solve the (vectorial) equation
301: 249: 228:) to be solved piecemeal by numerous processors. Processors with 217: 74: 2440: 2002:      (commutativity does not hold for matrices!) 483:
or alternatively, to emphasize the array nature of the objects,
2048: 1986:. The problem is that generally matrix multiplications are not 1727: 1307:
allows the same economy allowed by using the Fortran language.
1304: 524: 317: 297: 289: 209: 168: 78: 1406:, which reshapes a given matrix into a column vector, and the 2077: 2069: 797: 205: 197: 2008:      (associativity also holds for matrices) 1982:
would require two operations instead of the more efficient
1375: 325: 2017:
The MATLAB language introduces the left-division operator
1941:      (matrix-multiplication associativity) 663:
Analytica provides the same economy of expression as Ada.
551:
are scalars, or the sum of two arrays if they are arrays.
248:
The canonical examples of array programming languages are
27:
Applying operations to whole sets of values simultaneously
2261: 2430: 2350:"Metaoperators section of Raku Operator documentation" 579:
The previous C code would become the following in the
109:
operation, regardless of whether it is executed on a
117:
that require several pages of object-oriented code.
1760:). The following mathematical statements hold when 583:language, which supports array-programming syntax. 3316: 2364:"GNU Octave Manual. Appendix G Installing Octave" 3459: 1811:has more rows than columns ā€“ the pseudoinverse 65:, and higher-dimensional arrays. These include 196:; a topic of much research nowadays. Further, 3302: 2461: 1513:# !!this has nrow=2 ... and A has 2 rows 1289:+-------------------------------------------+ 1249:+-------------------------------------------+ 356:, operations apply only to single values, so 2404:"Blitz++ User's Guide. 3. Array Expressions" 2325:"MATLAB documentation. Arithmetic Operators" 1783:      (matrix-multiplication 1728:Mathematical reasoning and language notation 1355:Both MATLAB and GNU Octave natively support 1386:is a corresponding column vector of size . 1181:// Subscripting to get a submatrix of F and 3309: 3295: 2468: 2454: 1807:If the system is overdetermined ā€“ so that 1756:(in both MATLAB and GNU Octave languages: 1359:operations such as matrix multiplication, 1236:// symmetric positive semi-definite matrix 2532:Programming in the large and in the small 2305:"GNU Octave Manual. Arithmetic Operators" 2222:Meta-Compilation of Language Abstractions 2203: 2143: 1232:// Generalized inverse (F*F^(-1)F=F) of a 192:Array programming is very well suited to 2218: 2063: 1332:A variant of the MATLAB language is the 2182: 14: 3460: 1744:by left-multiplying both sides by the 3290: 2449: 2235: 1815:(in MATLAB and GNU Octave languages: 2132:Computing in Science and Engineering 543:expresses the sum of two scalars if 120: 2107:List of array programming languages 343: 24: 530: 25: 3484: 2424: 3076:Partitioned global address space 1363:, and the numerical solution of 2431:"No stinking loops" programming 2396: 2376: 2356: 2293:G.3.1 Real Vectors and Matrices 2188:"Notation as a Tool of Thought" 1944: 1888: 1827: 3318:Types of programming languages 2342: 2317: 2297: 2282: 2255: 2229: 2212: 2176: 2123: 13: 1: 3418: 2441:"Types of Arrays" programming 2117: 1736:of the) coefficient (matrix) 1382:is a row vector of size and 3450:Programming paradigms navbox 2603:Uniform Function Call Syntax 658: 348:In scalar languages such as 243: 212:, which include rudimentary 7: 3468:Array programming languages 3071:Parallel programming models 3045:Concurrent constraint logic 2436:Discovering Array Languages 2095: 1369:Mooreā€“Penrose pseudoinverse 42:and engineering settings. 18:Mata (programming language) 10: 3489: 3164:Metalinguistic abstraction 3031:Automatic mutual exclusion 1819:) can replace the inverse 1781:(A^-1 * A)* x ==A^-1 * b 1776:A^-1 *(A * x)==A^-1 * (b) 1365:system of linear equations 1234:: 1183:: 954:// A 3 by 2 matrix of ones 57:to apply transparently to 3377: 3324: 3219: 3104: 3036:Choreographic programming 3006: 2822: 2764: 2721: 2624: 2615: 2555: 2497: 2488: 2268:. Springer. p. 367. 2192:Communications of the ACM 1978:, for which the solution 1298: 517:vector-based instructions 3086:Relativistic programming 1699: 1471: 1465:The R language supports 1431: 1420: 1338: 1309: 802: 679: 669: 641: 615: 585: 485: 463: 366: 194:implicit parallelization 103:Perl Data Language (PDL) 2112:Automatic vectorization 1692: 1427:rasdaman query language 792: 240:are common as of 2023. 238:general computing cores 204:and continuing through 187: 3096:Structured concurrency 2481:Comparison by language 2061: 1681:# c() creates a vector 1303:The implementation in 608: 574: 154: 127:high-level programming 3473:Programming paradigms 3439:Programming languages 3061:Multitier programming 2877:Interface description 2477:Programming paradigms 2205:10.1145/358896.358899 2080:extension library to 2064:Third-party libraries 2056: 1238:: I 1185:// switch row 1 and 2 637:augmented assignments 178:Matrix multiplication 137: 2289:Ada Reference Manual 2162:10.1109/mcse.2011.37 1460: 3201:Self-modifying code 2809:Probabilistic logic 2740:Functional reactive 2695:Expression-oriented 2649:Partial application 2154:2011CSE....13b..22V 1802:relational operator 1800:is the equivalence 1396:is implemented as: 564:optimizing compiler 556:abstraction penalty 222:parallel processing 3114:Attribute-oriented 2887:List comprehension 2832:Algebraic modeling 2645:Anonymous function 2537:Design by contract 2507:Jackson structures 2138:(2). IEEE: 22ā€“30. 2074:overload operators 2031:(A \ A)* x ==A \ b 2026:A \ (A * x)==A \ b 2006:x * (a / a)==b / a 2000:(x * a)/ a ==b / a 1995:(a * x)/ a ==b / a 1135:+----------------+ 1104:+----------------+ 306:Perl Data Language 260:. Others include: 236:with thousands of 182:Collapse operators 133:Kenneth E. Iverson 3428:Computer language 3415: 3414: 3284: 3283: 3174:Program synthesis 3066:Organic computing 3002: 3001: 2907:Non-English-based 2882:Language-oriented 2660:Purely functional 2611: 2610: 2275:978-3-540-43784-0 2219:Surana P (2006). 1715:= ,,]; ] > 1708:= ,,]; ] > 1394:entrywise product 1392:By contrast, the 1367:, even using the 666:A := A + B; 121:Concepts of array 36:array programming 16:(Redirected from 3480: 3454: 3448: 3443: 3437: 3432: 3426: 3311: 3304: 3297: 3288: 3287: 3186:by demonstration 3091:Service-oriented 3081:Process-oriented 3056:Macroprogramming 3041:Concurrent logic 2912:Page description 2902:Natural language 2872:Grammar-oriented 2799:Nondeterministic 2788:Constraint logic 2690:Point-free style 2685:Functional logic 2622: 2621: 2593:Immutable object 2512:Block-structured 2495: 2494: 2470: 2463: 2456: 2447: 2446: 2419: 2418: 2416: 2415: 2406:. Archived from 2400: 2394: 2393: 2391: 2390: 2380: 2374: 2373: 2371: 2370: 2360: 2354: 2353: 2346: 2340: 2339: 2337: 2336: 2327:. Archived from 2321: 2315: 2314: 2312: 2311: 2301: 2295: 2286: 2280: 2279: 2259: 2253: 2252: 2250: 2249: 2240:. Archived from 2233: 2227: 2226: 2216: 2210: 2209: 2207: 2180: 2174: 2173: 2147: 2127: 2038: 2032: 2027: 2020: 2013: 2007: 2001: 1996: 1985: 1981: 1977: 1969: 1968: 1965: 1962: 1959: 1956: 1953: 1950: 1947: 1940: 1939: 1936: 1933: 1930: 1927: 1924: 1921: 1918: 1915: 1912: 1909: 1906: 1903: 1900: 1897: 1894: 1891: 1885: 1884: 1881: 1878: 1875: 1872: 1869: 1866: 1863: 1860: 1857: 1854: 1851: 1848: 1845: 1842: 1839: 1836: 1833: 1830: 1822: 1818: 1814: 1810: 1799: 1792: 1782: 1777: 1763: 1759: 1755: 1751: 1743: 1739: 1722: 1718: 1714: 1711: 1707: 1704: 1688: 1685: 1682: 1679: 1676: 1673: 1670: 1667: 1664: 1661: 1658: 1655: 1652: 1649: 1646: 1643: 1640: 1637: 1634: 1631: 1628: 1625: 1622: 1619: 1616: 1613: 1610: 1607: 1604: 1601: 1598: 1595: 1592: 1589: 1586: 1583: 1580: 1577: 1574: 1571: 1568: 1565: 1562: 1559: 1556: 1553: 1550: 1547: 1544: 1541: 1538: 1535: 1532: 1529: 1526: 1523: 1520: 1517: 1514: 1511: 1508: 1505: 1502: 1499: 1496: 1493: 1490: 1487: 1484: 1481: 1478: 1475: 1456: 1453: 1450: 1447: 1444: 1441: 1438: 1435: 1413: 1405: 1385: 1381: 1361:matrix inversion 1351: 1348: 1345: 1342: 1328: 1325: 1322: 1319: 1316: 1313: 1294: 1290: 1286: 1282: 1279: 1276: 1272: 1268: 1265: 1261: 1257: 1253: 1250: 1247: 1244: 1241: 1237: 1233: 1229: 1225: 1221: 1217: 1214: 1210: 1206: 1203: 1199: 1196: 1193: 1190: 1186: 1182: 1178: 1174: 1171: 1167: 1163: 1160: 1156: 1153: 1150: 1147: 1143: 1140: 1136: 1132: 1129: 1126: 1122: 1118: 1115: 1112: 1108: 1105: 1102: 1099: 1096: 1092: 1088: 1084: 1081: 1077: 1073: 1070: 1066: 1063: 1060: 1057: 1053: 1049: 1045: 1042: 1039: 1035: 1031: 1028: 1025: 1021: 1018: 1015: 1012: 1009: 1005: 1001: 997: 994: 990: 986: 983: 979: 975: 972: 968: 965: 962: 959: 955: 951: 947: 943: 939: 935: 931: 928: 925: 921: 917: 914: 911: 907: 904: 901: 898: 895: 891: 887: 883: 879: 875: 871: 868: 865: 861: 857: 854: 851: 847: 844: 841: 838: 835: 831: 827: 823: 819: 815: 811: 807: 788: 785: 782: 779: 776: 773: 770: 767: 764: 761: 758: 755: 752: 749: 746: 743: 740: 737: 734: 731: 728: 725: 722: 719: 716: 713: 710: 707: 704: 701: 698: 695: 692: 689: 686: 683: 654: 651: 648: 645: 631: 628: 625: 622: 619: 604: 601: 598: 595: 592: 589: 510: 507: 504: 501: 498: 495: 492: 489: 479: 476: 473: 470: 467: 457: 454: 451: 448: 445: 442: 439: 436: 433: 430: 427: 424: 421: 418: 415: 412: 409: 406: 403: 400: 397: 394: 391: 388: 385: 382: 379: 376: 373: 370: 344:Scalar languages 111:vector processor 51:multidimensional 32:computer science 21: 3488: 3487: 3483: 3482: 3481: 3479: 3478: 3477: 3458: 3457: 3452: 3446: 3441: 3435: 3430: 3424: 3421: 3416: 3411: 3373: 3364:Very high-level 3320: 3315: 3285: 3280: 3222: 3215: 3106:Metaprogramming 3100: 3016: 3011: 2998: 2980:Graph rewriting 2818: 2794:Inductive logic 2774:Abductive logic 2760: 2717: 2680:Dependent types 2628: 2607: 2579:Prototype-based 2559: 2557:Object-oriented 2551: 2547:Nested function 2542:Invariant-based 2484: 2474: 2427: 2422: 2413: 2411: 2402: 2401: 2397: 2388: 2386: 2382: 2381: 2377: 2368: 2366: 2362: 2361: 2357: 2348: 2347: 2343: 2334: 2332: 2323: 2322: 2318: 2309: 2307: 2303: 2302: 2298: 2287: 2283: 2276: 2260: 2256: 2247: 2245: 2234: 2230: 2217: 2213: 2181: 2177: 2128: 2124: 2120: 2098: 2066: 2036: 2030: 2025: 2018: 2011: 2005: 1999: 1994: 1983: 1979: 1975: 1966: 1963: 1960: 1957: 1954: 1951: 1948: 1945: 1937: 1934: 1931: 1928: 1925: 1922: 1919: 1916: 1913: 1910: 1907: 1904: 1901: 1898: 1895: 1892: 1889: 1882: 1879: 1876: 1873: 1870: 1867: 1864: 1861: 1858: 1855: 1852: 1849: 1846: 1843: 1840: 1837: 1834: 1831: 1828: 1820: 1816: 1812: 1808: 1797: 1790: 1780: 1775: 1761: 1757: 1753: 1749: 1741: 1737: 1730: 1725: 1724: 1720: 1719: Ā»+Ā«  1716: 1712: 1709: 1705: 1702: 1695: 1690: 1689: 1686: 1683: 1680: 1677: 1674: 1671: 1668: 1665: 1662: 1659: 1656: 1653: 1650: 1647: 1644: 1641: 1638: 1635: 1632: 1629: 1626: 1623: 1620: 1617: 1614: 1611: 1608: 1605: 1602: 1599: 1596: 1593: 1590: 1587: 1584: 1581: 1578: 1575: 1572: 1569: 1566: 1563: 1560: 1557: 1554: 1551: 1548: 1545: 1542: 1539: 1536: 1533: 1530: 1527: 1524: 1521: 1518: 1515: 1512: 1509: 1506: 1503: 1500: 1497: 1494: 1491: 1488: 1485: 1482: 1479: 1476: 1473: 1463: 1458: 1457: 1454: 1451: 1448: 1445: 1442: 1439: 1436: 1433: 1423: 1418: 1411: 1403: 1400: 1390: 1383: 1379: 1353: 1352: 1349: 1346: 1343: 1340: 1330: 1329: 1326: 1323: 1320: 1317: 1314: 1311: 1301: 1296: 1295: 1292: 1288: 1284: 1280: 1277: 1274: 1270: 1266: 1263: 1259: 1255: 1251: 1248: 1245: 1242: 1239: 1235: 1231: 1227: 1223: 1219: 1215: 1212: 1208: 1204: 1201: 1197: 1194: 1191: 1188: 1184: 1180: 1176: 1172: 1169: 1165: 1161: 1158: 1154: 1151: 1148: 1145: 1141: 1138: 1134: 1130: 1127: 1124: 1120: 1116: 1113: 1110: 1106: 1103: 1100: 1097: 1094: 1090: 1086: 1082: 1079: 1075: 1071: 1068: 1064: 1061: 1058: 1055: 1051: 1048:+-------------+ 1047: 1043: 1040: 1037: 1033: 1029: 1026: 1023: 1019: 1017:+-------------+ 1016: 1013: 1010: 1007: 1003: 999: 995: 992: 988: 984: 981: 977: 973: 970: 966: 963: 960: 957: 953: 949: 945: 941: 937: 934:+-------------+ 933: 929: 926: 923: 919: 915: 912: 909: 905: 903:+-------------+ 902: 899: 896: 893: 889: 885: 881: 877: 874:+-------------+ 873: 869: 866: 863: 859: 855: 852: 849: 845: 843:+-------------+ 842: 839: 836: 833: 829: 825: 821: 817: 813: 809: 805: 795: 790: 789: 786: 783: 780: 777: 774: 771: 768: 765: 762: 759: 756: 753: 750: 747: 744: 741: 738: 735: 732: 729: 726: 723: 720: 717: 714: 711: 708: 705: 702: 699: 696: 693: 690: 687: 684: 681: 675:Dartmouth BASIC 672: 667: 661: 656: 655: 652: 649: 646: 643: 633: 632: 629: 626: 623: 620: 617: 611: 606: 605: 602: 599: 596: 593: 590: 587: 577: 533: 531:Array languages 512: 511: 508: 505: 502: 499: 496: 493: 490: 487: 481: 480: 477: 474: 471: 468: 465: 459: 458: 455: 452: 449: 446: 443: 440: 437: 434: 431: 428: 425: 422: 419: 416: 413: 410: 407: 404: 401: 398: 395: 392: 389: 386: 383: 380: 377: 374: 371: 368: 346: 246: 190: 123: 28: 23: 22: 15: 12: 11: 5: 3486: 3476: 3475: 3470: 3456: 3455: 3444: 3433: 3420: 3417: 3413: 3412: 3410: 3409: 3404: 3399: 3394: 3389: 3383: 3381: 3375: 3374: 3372: 3371: 3366: 3361: 3356: 3350: 3349: 3344: 3339: 3334: 3328: 3326: 3322: 3321: 3314: 3313: 3306: 3299: 3291: 3282: 3281: 3279: 3278: 3273: 3268: 3263: 3258: 3253: 3248: 3243: 3238: 3233: 3227: 3225: 3217: 3216: 3214: 3213: 3208: 3203: 3198: 3193: 3171: 3166: 3161: 3151: 3146: 3141: 3136: 3131: 3126: 3116: 3110: 3108: 3102: 3101: 3099: 3098: 3093: 3088: 3083: 3078: 3073: 3068: 3063: 3058: 3053: 3048: 3038: 3033: 3028: 3022: 3020: 3004: 3003: 3000: 2999: 2997: 2996: 2991: 2976:Transformation 2973: 2968: 2963: 2958: 2953: 2948: 2943: 2938: 2933: 2928: 2923: 2914: 2909: 2904: 2899: 2894: 2889: 2884: 2879: 2874: 2869: 2864: 2862:Differentiable 2859: 2849: 2842:Automata-based 2839: 2834: 2828: 2826: 2820: 2819: 2817: 2816: 2811: 2806: 2801: 2796: 2791: 2781: 2776: 2770: 2768: 2762: 2761: 2759: 2758: 2753: 2748: 2743: 2733: 2727: 2725: 2719: 2718: 2716: 2715: 2709:Function-level 2706: 2697: 2692: 2687: 2682: 2677: 2672: 2667: 2662: 2657: 2652: 2642: 2636: 2634: 2619: 2613: 2612: 2609: 2608: 2606: 2605: 2600: 2595: 2590: 2585: 2571: 2569: 2553: 2552: 2550: 2549: 2544: 2539: 2534: 2529: 2524: 2522:Non-structured 2519: 2514: 2509: 2503: 2501: 2492: 2486: 2485: 2473: 2472: 2465: 2458: 2450: 2444: 2443: 2438: 2433: 2426: 2425:External links 2423: 2421: 2420: 2395: 2375: 2355: 2341: 2316: 2296: 2281: 2274: 2254: 2228: 2211: 2198:(8): 444ā€“465. 2184:Iverson, K. E. 2175: 2121: 2119: 2116: 2115: 2114: 2109: 2104: 2097: 2094: 2092:libraries do. 2065: 2062: 2040: 2039: 2034: 2028: 2015: 2014: 2009: 2003: 1997: 1971: 1970: 1942: 1886: 1823:, as follows: 1794: 1793: 1788: 1778: 1729: 1726: 1700: 1694: 1691: 1472: 1467:array paradigm 1462: 1459: 1432: 1422: 1419: 1417:A(:)' * B(:); 1416: 1398: 1388: 1357:linear algebra 1339: 1310: 1300: 1297: 1137:: G = E : 1093:B : F 1054:C : E 803: 794: 791: 680: 671: 668: 665: 660: 657: 642: 616: 610: 607: 586: 576: 573: 532: 529: 486: 464: 367: 345: 342: 245: 242: 230:multiple cores 189: 186: 122: 119: 26: 9: 6: 4: 3: 2: 3485: 3474: 3471: 3469: 3466: 3465: 3463: 3451: 3445: 3440: 3434: 3429: 3423: 3422: 3408: 3405: 3403: 3400: 3398: 3395: 3393: 3390: 3388: 3385: 3384: 3382: 3380: 3376: 3370: 3367: 3365: 3362: 3360: 3357: 3355: 3352: 3351: 3348: 3345: 3343: 3340: 3338: 3335: 3333: 3330: 3329: 3327: 3323: 3319: 3312: 3307: 3305: 3300: 3298: 3293: 3292: 3289: 3277: 3274: 3272: 3269: 3267: 3264: 3262: 3259: 3257: 3254: 3252: 3249: 3247: 3246:Data-oriented 3244: 3242: 3239: 3237: 3234: 3232: 3229: 3228: 3226: 3224: 3218: 3212: 3209: 3207: 3204: 3202: 3199: 3197: 3194: 3191: 3187: 3183: 3179: 3175: 3172: 3170: 3167: 3165: 3162: 3159: 3155: 3152: 3150: 3147: 3145: 3144:Homoiconicity 3142: 3140: 3137: 3135: 3132: 3130: 3127: 3124: 3120: 3117: 3115: 3112: 3111: 3109: 3107: 3103: 3097: 3094: 3092: 3089: 3087: 3084: 3082: 3079: 3077: 3074: 3072: 3069: 3067: 3064: 3062: 3059: 3057: 3054: 3052: 3051:Concurrent OO 3049: 3046: 3042: 3039: 3037: 3034: 3032: 3029: 3027: 3024: 3023: 3021: 3019: 3014: 3009: 3005: 2995: 2992: 2989: 2985: 2981: 2977: 2974: 2972: 2969: 2967: 2964: 2962: 2959: 2957: 2954: 2952: 2949: 2947: 2946:Set-theoretic 2944: 2942: 2939: 2937: 2934: 2932: 2929: 2927: 2926:Probabilistic 2924: 2922: 2918: 2915: 2913: 2910: 2908: 2905: 2903: 2900: 2898: 2895: 2893: 2890: 2888: 2885: 2883: 2880: 2878: 2875: 2873: 2870: 2868: 2865: 2863: 2860: 2857: 2853: 2850: 2847: 2843: 2840: 2838: 2835: 2833: 2830: 2829: 2827: 2825: 2821: 2815: 2812: 2810: 2807: 2805: 2802: 2800: 2797: 2795: 2792: 2789: 2785: 2782: 2780: 2777: 2775: 2772: 2771: 2769: 2767: 2763: 2757: 2754: 2752: 2749: 2747: 2744: 2741: 2737: 2734: 2732: 2729: 2728: 2726: 2724: 2720: 2714: 2710: 2707: 2705: 2704:Concatenative 2701: 2698: 2696: 2693: 2691: 2688: 2686: 2683: 2681: 2678: 2676: 2673: 2671: 2668: 2666: 2663: 2661: 2658: 2656: 2653: 2650: 2646: 2643: 2641: 2638: 2637: 2635: 2632: 2627: 2623: 2620: 2618: 2614: 2604: 2601: 2599: 2596: 2594: 2591: 2589: 2586: 2584: 2580: 2576: 2573: 2572: 2570: 2567: 2563: 2558: 2554: 2548: 2545: 2543: 2540: 2538: 2535: 2533: 2530: 2528: 2525: 2523: 2520: 2518: 2515: 2513: 2510: 2508: 2505: 2504: 2502: 2500: 2496: 2493: 2491: 2487: 2482: 2478: 2471: 2466: 2464: 2459: 2457: 2452: 2451: 2448: 2442: 2439: 2437: 2434: 2432: 2429: 2428: 2410:on 2011-03-23 2409: 2405: 2399: 2385: 2379: 2365: 2359: 2351: 2345: 2331:on 2010-09-07 2330: 2326: 2320: 2306: 2300: 2294: 2290: 2285: 2277: 2271: 2267: 2266: 2258: 2244:on 2009-01-11 2243: 2239: 2232: 2224: 2223: 2215: 2206: 2201: 2197: 2193: 2189: 2185: 2179: 2171: 2167: 2163: 2159: 2155: 2151: 2146: 2141: 2137: 2133: 2126: 2122: 2113: 2110: 2108: 2105: 2103: 2102:Array slicing 2100: 2099: 2093: 2091: 2087: 2083: 2079: 2075: 2071: 2060: 2055: 2052: 2050: 2046: 2035: 2029: 2024: 2023: 2022: 2010: 2004: 1998: 1993: 1992: 1991: 1989: 1943: 1887: 1826: 1825: 1824: 1805: 1803: 1789: 1786: 1785:associativity 1779: 1774: 1773: 1772: 1770: 1769:square matrix 1767: 1747: 1735: 1698: 1470: 1468: 1430: 1428: 1415: 1409: 1397: 1395: 1387: 1377: 1372: 1370: 1366: 1362: 1358: 1337: 1335: 1308: 1306: 1273:| 1262:| 1254:| 1220:+-----------+ 1195:+-----------+ 1177:+-----------+ 1152:+-----------+ 1087:+-----------+ 1062:+-----------+ 1006:B : D 892:) : B 832:) : A 801: 799: 678: 676: 664: 640: 638: 614: 584: 582: 572: 570: 565: 561: 557: 552: 550: 546: 542: 538: 528: 526: 522: 518: 484: 462: 365: 363: 359: 355: 351: 341: 339: 335: 331: 327: 323: 319: 315: 311: 307: 303: 299: 295: 291: 287: 283: 279: 275: 271: 267: 263: 259: 255: 251: 241: 239: 235: 231: 227: 223: 219: 215: 211: 207: 203: 199: 195: 185: 183: 179: 175: 174:cross product 170: 166: 165:Function rank 162: 160: 153: 149: 147: 144: 140: 136: 134: 130: 128: 118: 116: 112: 108: 104: 100: 96: 92: 88: 84: 80: 76: 72: 68: 64: 60: 56: 52: 48: 43: 41: 37: 33: 19: 3453:}} 3447:{{ 3442:}} 3436:{{ 3431:}} 3425:{{ 3251:Event-driven 2836: 2655:Higher-order 2583:Object-based 2412:. Retrieved 2408:the original 2398: 2387:. Retrieved 2378: 2367:. Retrieved 2358: 2344: 2333:. Retrieved 2329:the original 2319: 2308:. Retrieved 2299: 2284: 2264: 2257: 2246:. Retrieved 2242:the original 2231: 2221: 2214: 2195: 2191: 2178: 2135: 2131: 2125: 2067: 2057: 2053: 2041: 2016: 1980:x = a^-1 * b 1972: 1806: 1795: 1791:x = A^-1 * b 1731: 1696: 1464: 1424: 1401: 1391: 1373: 1354: 1331: 1302: 1187:: H 1144:: G 952:) 796: 673: 662: 634: 612: 578: 555: 553: 548: 544: 540: 536: 534: 513: 482: 460: 361: 357: 347: 247: 191: 163: 155: 150: 148: 145: 141: 138: 131: 124: 106: 44: 35: 29: 3347:Interpreted 3261:Intentional 3241:Data-driven 3223:of concerns 3182:Inferential 3169:Multi-stage 3149:Interactive 3026:Actor-based 3013:distributed 2956:Stack-based 2756:Synchronous 2713:Value-level 2700:Applicative 2617:Declarative 2575:Class-based 2236:Kuketayev. 1988:commutative 1734:determinant 1525:2 4 6 1522:1 3 5 1179:: H = F 1000:+---------+ 964:+---------+ 956:: C 3462:Categories 3379:Generation 3359:High-level 3236:Components 3221:Separation 3196:Reflective 3190:by example 3134:Extensible 3008:Concurrent 2984:Production 2971:Templating 2951:Simulation 2936:Scientific 2856:Spacecraft 2784:Constraint 2779:Answer set 2731:Flow-based 2631:comparison 2626:Functional 2598:Persistent 2562:comparison 2527:Procedural 2499:Structured 2490:Imperative 2414:2011-03-19 2389:2011-03-19 2369:2011-03-19 2335:2011-03-19 2310:2011-03-19 2248:2008-03-17 2118:References 1334:GNU Octave 1285:9444444444 1230:F) 294:GNU Octave 115:one-liners 107:vectorized 40:scientific 3354:Low-level 3123:Inductive 3119:Automatic 2941:Scripting 2640:Recursive 2225:(Thesis). 2145:1102.1523 2086:Armadillo 2037:x = A \ b 2012:x = b / a 1984:x = b / a 1976:a * x = b 1766:full rank 1742:A * x = b 1410:operator 1408:transpose 808:: : A = ( 659:Analytica 560:efficient 284:, Klong, 266:Analytica 244:Languages 95:Cilk Plus 83:Analytica 3419:See also 3369:Esoteric 3342:Compiled 3337:Assembly 3276:Subjects 3266:Literate 3256:Features 3211:Template 3206:Symbolic 3178:Bayesian 3158:Hygienic 3018:parallel 2897:Modeling 2892:Low-code 2867:End-user 2804:Ontology 2736:Reactive 2723:Dataflow 2186:(1980). 2170:16907816 2096:See also 1399:a .* b; 1089:: F = A: 1002:: D = A 569:overhead 338:TI-BASIC 63:matrices 3332:Machine 3231:Aspects 3139:Generic 3129:Dynamic 2988:Pattern 2966:Tactile 2931:Quantum 2921:filters 2852:Command 2751:Streams 2746:Signals 2517:Modular 2150:Bibcode 2090:Blitz++ 1817:pinv(A) 1746:inverse 1687:42 30 1684:30 21 1651:41 29 1648:29 20 1621:40 28 1618:28 19 1389:a * b; 1226:(F' 1050:: E = A 876:: B = ( 334:Futhark 308:(PDL), 302:FreeMat 250:Fortran 218:AVX-512 75:Fortran 59:vectors 55:scalars 3402:Fourth 3392:Second 2994:Visual 2961:System 2846:Action 2670:Strict 2272:  2168:  2082:Python 2049:LAPACK 1796:where 1723:; ] 1591:2 1 1588:4 3 1585:6 5 1543:matrix 1483:matrix 1434:SELECT 1305:MATLAB 1299:MATLAB 1287:| 1224:invsym 1222:: I = 1218:| 1175:| 1133:| 1085:| 1046:| 998:| 936:: C = 932:| 872:| 525:OpenMP 354:Pascal 336:, and 318:S-Lang 298:Scilab 290:MATLAB 270:Chapel 256:, and 210:3DNow! 169:tensor 159:scalar 87:Octave 79:MATLAB 47:vector 3407:Fifth 3397:Third 3387:First 3325:Level 3271:Roles 3154:Macro 2917:Pipes 2837:Array 2814:Query 2766:Logic 2675:GADTs 2665:Total 2588:Agent 2166:S2CID 2140:arXiv 2078:NumPy 2045:ATLAS 1764:is a 1701:> 1654:> 1642:> 1630:<- 1624:> 1612:> 1600:<- 1594:> 1579:> 1534:<- 1528:> 1516:> 1480:<- 1474:> 1421:rasql 798:Stata 772:PRINT 670:BASIC 509:(:,:) 500:(:,:) 491:(:,:) 278:Julia 206:SSSE3 198:Intel 99:Julia 2919:and 2566:list 2270:ISBN 2088:and 1952:pinv 1923:pinv 1893:pinv 1862:pinv 1829:pinv 1758:A^-1 1693:Raku 1561:nrow 1501:nrow 1446:FROM 1425:The 1376:Nial 1374:The 1281:1.75 1269:| 1267:3.25 1258:| 1211:| 1207:| 1200:| 1164:| 1157:| 1123:| 1119:| 1109:| 1074:| 1067:| 1032:| 987:| 976:| 918:| 884:) \( 858:| 820:) \( 806:mata 793:Mata 547:and 429:< 390:< 352:and 326:Nial 314:Raku 234:GPUs 232:and 226:MIMD 214:SIMD 208:and 188:Uses 2824:DSL 2200:doi 2158:doi 2070:C++ 2047:or 1748:of 1606:%*% 1404:(:) 1293:end 1168:| 1078:| 1036:| 1022:| 991:| 980:| 969:| 922:| 908:| 862:| 848:| 769:MAT 751:MAT 733:MAT 721:MAT 682:DIM 609:APL 581:Ada 575:Ada 571:). 521:GCC 408:for 369:for 330:ZPL 322:SAC 274:IDL 254:APL 202:MMX 67:APL 49:or 30:In 3464:: 3188:, 3184:, 3180:, 2986:, 2982:, 2711:, 2702:, 2581:, 2577:, 2564:, 2291:: 2196:23 2194:. 2190:. 2164:. 2156:. 2148:. 2136:13 2134:. 2084:, 2051:. 1920:== 1859:== 1798:== 1771:: 1752:: 1721:@b 1717:@a 1713:@b 1710:my 1706:@a 1703:my 1414:: 1371:. 1344:+= 1205:10 1173:18 1170:18 1131:18 1128:10 1117:12 1083:15 1080:15 888:.. 880:.. 706:), 694:), 639:: 591::= 450:+= 441:++ 402:++ 340:. 332:, 328:, 324:, 320:, 316:, 312:, 304:, 300:, 296:, 292:, 288:, 280:, 276:, 272:, 268:, 264:, 262:A+ 252:, 101:, 97:, 93:, 89:, 85:, 81:, 77:, 73:, 69:, 61:, 34:, 3310:e 3303:t 3296:v 3192:) 3176:( 3160:) 3156:( 3125:) 3121:( 3047:) 3043:( 3015:, 3010:, 2990:) 2978:( 2858:) 2854:( 2848:) 2844:( 2790:) 2786:( 2742:) 2738:( 2651:) 2647:( 2633:) 2629:( 2568:) 2560:( 2483:) 2479:( 2469:e 2462:t 2455:v 2417:. 2392:. 2372:. 2352:. 2338:. 2313:. 2278:. 2251:. 2208:. 2202:: 2172:. 2160:: 2152:: 2142:: 2019:\ 1967:b 1964:* 1961:) 1958:A 1955:( 1949:= 1946:x 1938:b 1935:* 1932:) 1929:A 1926:( 1917:x 1914:* 1911:) 1908:A 1905:* 1902:) 1899:A 1896:( 1890:( 1883:) 1880:b 1877:( 1874:* 1871:) 1868:A 1865:( 1856:) 1853:x 1850:* 1847:A 1844:( 1841:* 1838:) 1835:A 1832:( 1821:A 1813:A 1809:A 1787:) 1762:A 1754:A 1750:A 1738:A 1678:) 1675:1 1672:, 1669:1 1666:( 1663:c 1660:+ 1657:D 1645:D 1639:1 1636:+ 1633:C 1627:D 1615:C 1609:B 1603:A 1597:C 1582:B 1573:) 1570:) 1567:2 1564:= 1558:, 1555:1 1552:: 1549:6 1546:( 1540:( 1537:t 1531:B 1519:A 1510:) 1507:2 1504:= 1498:, 1495:6 1492:: 1489:1 1486:( 1477:A 1461:R 1455:B 1452:, 1449:A 1443:B 1440:+ 1437:A 1412:' 1384:b 1380:a 1350:; 1347:B 1341:A 1327:; 1324:B 1321:+ 1318:A 1315:= 1312:A 1291:: 1283:. 1278:- 1275:0 1271:3 1264:0 1260:2 1256:0 1252:1 1246:3 1243:2 1240:1 1228:* 1216:6 1213:2 1209:2 1202:4 1198:1 1192:2 1189:1 1166:2 1162:9 1159:9 1155:1 1149:2 1146:1 1142:3 1139:+ 1125:4 1121:2 1114:6 1111:2 1107:1 1101:3 1098:2 1095:1 1091:* 1076:2 1072:6 1069:6 1065:1 1059:2 1056:1 1052:* 1044:9 1041:7 1038:5 1034:2 1030:7 1027:5 1024:3 1020:1 1014:3 1011:2 1008:1 1004:+ 996:1 993:1 989:3 985:1 982:1 978:2 974:1 971:1 967:1 961:2 958:1 950:1 948:, 946:2 944:, 942:3 940:( 938:J 930:3 927:2 924:1 920:2 916:4 913:3 910:2 906:1 900:3 897:2 894:1 890:3 886:1 882:4 878:2 870:6 867:5 864:4 860:2 856:3 853:2 850:1 846:1 840:3 837:2 834:1 830:6 828:, 826:5 824:, 822:4 818:3 816:, 814:2 812:, 810:1 804:. 787:C 784:, 781:B 778:, 775:A 766:B 763:+ 760:A 757:= 754:C 748:A 745:* 742:2 739:= 736:B 730:1 727:= 724:A 718:) 715:4 712:( 709:C 703:4 700:( 697:B 691:4 688:( 685:A 653:B 650:ā† 647:+ 644:A 630:B 627:+ 624:A 621:ā† 618:A 603:; 600:B 597:+ 594:A 588:A 549:b 545:a 541:b 539:+ 537:a 506:b 503:+ 497:a 494:= 488:a 478:b 475:+ 472:a 469:= 466:a 456:; 453:b 447:a 444:) 438:j 435:; 432:n 426:j 423:; 420:0 417:= 414:j 411:( 405:) 399:i 396:; 393:n 387:i 384:; 381:0 378:= 375:i 372:( 362:b 360:+ 358:a 350:C 310:R 286:Q 282:K 258:J 91:R 71:J 20:)

Index

Mata (programming language)
computer science
scientific
vector
multidimensional
scalars
vectors
matrices
APL
J
Fortran
MATLAB
Analytica
Octave
R
Cilk Plus
Julia
Perl Data Language (PDL)
vector processor
one-liners
high-level programming
Kenneth E. Iverson
scalar
Function rank
tensor
cross product
Matrix multiplication
Collapse operators
implicit parallelization
Intel

Text is available under the Creative Commons Attribution-ShareAlike License. Additional terms may apply.

ā†‘