青春永驻是什么意思| 人参泡酒有什么功效| 腋下有异味是什么原因| 云南白药气雾剂保险液有什么作用| 痛风可以吃什么肉| 所费不赀是什么意思| eb病毒感染是什么病| 插管意味着什么| 孕妇贫血吃什么药| 宝宝满周岁送什么礼物| 远字五行属什么| 吃什么食物快速降糖| 梦见死猪是什么意思| 巨大的什么| 什么样的人容易垂体瘤| 苏州有什么特产可以带回家| 什么是工作日| 黄疸是什么| 卵巢无回声是什么意思| 竹荪是什么| 4月23日什么星座| 大便干燥吃什么| wa是什么意思| 零点是什么意思| 牛油果是什么季节的水果| 金黄色葡萄球菌是什么菌| 单病种是什么意思| 矢车菊在中国叫什么名| 眉毛长白毛是什么征兆| 扁桃体肿大是什么原因引起的| txt什么意思| 19时是什么时辰| jojo是什么意思| 喜欢闻汽油味是什么原因| 山本耀司的品牌叫什么| 神经性皮炎用什么药膏好| 煮玉米为什么要放盐| 尿酸高有什么反应| 护照免签是什么意思| 牛黄解毒片不能和什么药一起吃| crayon什么意思| 胃反酸吃什么药最好| 中医四诊指的是什么| 来月经同房会有什么后果| 手指变形是什么原因| 聚少离多是什么意思| 泌尿感染是什么原因引起的| 梦见捡到很多钱是什么意思| 鸽子和什么一起炖汤最有营养| 昂热为什么认识路鸣泽| 散步有什么好处| 帝陀表什么档次| 虬角为什么要染成绿色| 妇科千金片主要治什么| 肺纤维增殖灶是什么意思| art是什么意思| 做完人流需要注意什么| 湿气重的人吃什么好| 鼻梁歪的男人说明什么| pnh是什么病的简称| 高血糖吃什么水果| 一个木一个舌读什么| 眼睛红吃什么药| 胰岛素起什么作用| 阿玛施属于什么档次| 喘不上气挂什么科| nuxe是什么牌子| 理工科是什么意思| 嘴唇发红是什么原因| 一个巾一个童读什么| 什么叫会车| c13呼气试验阳性是什么意思| 小苏打学名叫什么| zfc是什么牌子| 手指关节疼痛是什么原因| 10月24日什么星座| 什么叫做缘分| 空腹吃西红柿有什么危害| 高密度脂蛋白胆固醇高是什么意思| 色觉异常是什么意思| 大便拉不出来是什么原因| 淡水鱼什么鱼最好吃| 精神可嘉是什么意思| 经常打嗝是什么原因引起的| 肾脏炎有什么症状| 宫颈锥切后需要注意什么| 神经质是什么意思| 格林巴利综合症是什么病| 疾苦的疾是什么意思| 平均血小板体积低是什么原因| gag是什么意思| 有张有弛是什么意思| 双币信用卡是什么意思| 正印是什么意思| 2005属什么| 太阳穴痛是什么原因| 为什么健身后体重反而重了| 次氯酸钠是什么| 梦见好多死人是什么征兆| 酸枣仁有什么功效| 消化性溃疡吃什么药好| 什么的世界| 牙套什么材质的好| 红果是什么| 小便有点黄是什么原因| 检查肺部应该挂什么科| 土字生肖有钱收是什么生肖| 刮宫后需要注意什么| 吃什么不便秘可以通便| ab和o型血生的孩子是什么血型| 面部痉挛吃什么药| 肾检查挂什么科| 安阳车牌号是豫什么| 有脚气用什么药| 羊内腰和外腰分别是什么| 艺伎什么意思| 官方翻新机是什么意思| 烂漫是什么意思| 什么水果对眼睛好| 止血敏又叫什么| waist是什么意思| bc是什么牌子| 中国什么武器世界第一| 有什么好用的vpn| 边鱼是什么鱼| 哈吉斯牌子是什么档次| 万艾可是什么药| 心影不大是什么意思| gjb2基因杂合突变是什么意思| 众什么意思| gpa什么意思| 发际线高的人说明什么| 豉油是什么油| 颏下是什么部位| 包皮过长有什么危害| cvd是什么意思| 中药什么时候喝| 梦见大火是什么意思| 什么是艾滋病| 孕妇肚子疼是什么原因| hedgren是什么品牌| 三栖明星是什么意思| 梦见自己的衣服丢了是什么意思| 老人脚浮肿是什么原因引起的| 老虎头衣服是什么牌子| 睡觉口干是什么原因| 冰箱底部漏水是什么原因| 更年期吃什么食物好| 痛风什么原因引起| tomorrow什么意思| 丙申五行属什么| 喝柠檬水有什么好处| dpd是什么意思| 手经常抽筋是什么原因| 假牛肉干是什么做的| 夏天穿什么衣服比较凉爽| 张五行属什么| 什么是灌肠| 耳膜穿孔有什么症状| 鞘膜积液挂什么科| 甲钴胺片治什么病| 爱出者爱返福往者福来什么意思| 酗酒什么意思| 铜镯子对人有什么好处| 大姨妈每个月提前来是什么原因| 菊花和什么一起泡最好| 血红蛋白偏低吃什么补| 老人家头晕是什么原因| 葡萄糖输液有什么作用| 7.14日是什么日子| 桃花是指什么生肖| 尿hcg阴性是什么意思| 吃完油炸的东西后吃什么化解| 行代表什么生肖| 骨肉瘤是什么病| 便民门诊是做什么的| 县宣传部长是什么级别| 中国第一大姓是什么| rag是什么意思| 最大的行星是什么| 打下手什么意思| 背厚是什么原因造成的| 喝什么睡眠效果最好| 吃什么清肺养肺| 吃什么菜减肥最快| 为什么家里有蚂蚁| 什么是重水| lotus是什么意思| 喝碱性水有什么好处| 什么的事| 尿比重高是什么原因| 牙龈一直肿不消什么原因| 地球上什么东西每天要走的距离最远| 什么是韵母| 大曲是什么| 什么是格林巴利综合症| 放屁多是什么病的征兆| 洗手做羹汤是什么意思| 什么人容易得天疱疮| 什么鱼红烧好吃| 为什么会心悸| 哥哥的儿子叫什么| 一什么石子| 疖肿是什么意思| 什么的威尼斯| 意难平是什么意思| 梦见杀鸡是什么意思| 单侧耳鸣是什么原因引起的| 孕妇睡觉流口水是什么原因| 左耳嗡嗡响吃什么药| 什么是漏斗胸| 古代四大发明是什么| 口腔溃疡是缺什么| 丹凤眼是什么样| 自来鸟是什么兆头| 杜甫被称为什么| 打蛇打七寸是什么意思| 吃什么补肾最快最有效| 舟山念什么| 小孩下半夜咳嗽是什么原因| 吃什么去肝火见效快| pnp是什么意思| 为什么会得脑血栓| 两个b型血能生出什么血型的孩子| 胃气不通什么症状| 淋巴结肿大挂什么科| 炖牛腩放什么调料| 三轮体空是什么意思| 瑜伽是什么| 尿酸高什么原因引起的| 日行一善下一句是什么| 馄饨皮可以做什么美食| 黑枸杞泡茶是什么颜色| 湿疹吃什么药好| 硫酸是什么| 润物细无声是什么意思| 孕期补铁吃什么| 9月30日什么星座| 为什么会射精| 为什么一动就满头大汗| 复方阿胶浆适合什么样的人喝| launch什么意思| 红豆配什么打豆浆好喝| 什么排球好| 尿有臭味是什么原因| 但愿人长久的下一句是什么| 什么叫庚日| 梦见很多虫子是什么意思| 闹代表什么生肖| 小女子这厢有礼了什么意思| 股级干部是什么级别| 为感是什么意思| 做馒头用什么面粉好| 无花果叶子有什么功效| 农历五月十八是什么日子| 什么是间质性肺炎| 生意兴隆是什么意思| 长期吃避孕药有什么副作用| 吃什么不会胖又减肥| 喝什么汤下奶最快最多| 肝火旺吃什么降火最快| 丙氨酸氨基转移酶高吃什么药| 爱打哈欠是什么原因| 反酸是什么意思| 百度

天气:天津沙尘强度今上午升级 最高气温23℃

百度 事实上,城镇化在发展过程中不会一成不变,而会表现出不同的发展阶段。

In computer science, array programming refers to solutions that allow the application of operations to an entire set of values at once. Such solutions are commonly used in scientific and engineering settings.

Modern programming languages that support array programming (also known as vector or multidimensional languages) have been engineered specifically to generalize operations on scalars to apply transparently to vectors, matrices, and higher-dimensional arrays. These include APL, J, Fortran, MATLAB, Analytica, Octave, R, Cilk Plus, Julia, Perl Data Language (PDL), Raku (programming language). In these languages, an operation that operates on entire arrays can be called a vectorized operation,[1] regardless of whether it is executed on a vector processor, 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[example needed] to find array programming language one-liners that require several pages of object-oriented code.

Concepts of array

edit

The fundamental idea behind array programming is that operations apply at once to an entire set of values. This makes it a high-level programming 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.

Kenneth E. Iverson described the rationale behind array programming (actually referring to APL) as follows:[2]

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.

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 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.

Indeed, the very suggestiveness of a notation may make it seem harder to learn because of the many properties it suggests for explorations.

[...]

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 as a basis from which one may easily derive a more efficient algorithm.

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 scalar quantities), array orientation looks to group data and apply a uniform handling.

Function rank is an important concept to array programming languages in general, by analogy to tensor 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 cross product operation is an example of a vector rank function because it operates on vectors, not scalars. Matrix multiplication is an example of a 2-rank function, because it operates on 2-dimensional objects (matrices). Collapse operators 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.

Uses

edit

Array programming is very well suited to implicit parallelization; a topic of much research nowadays. Further, Intel and compatible CPUs developed and produced after 1997 contained various instruction set extensions, starting from MMX and continuing through SSSE3 and 3DNow!, which include rudimentary SIMD array capabilities. This has continued into the 2020s with instruction sets such as AVX-512, making modern CPUs sophisticated vector processors. Array processing is distinct from parallel processing 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 (MIMD) to be solved piecemeal by numerous processors. Processors with multiple cores and GPUs with thousands of general computing cores are common as of 2023.

Languages

edit

The canonical examples of array programming languages are Fortran, APL, and J. Others include: A+, Analytica, Chapel, IDL, Julia, K, Klong, Q, MATLAB, GNU Octave, Scilab, FreeMat, Perl Data Language (PDL), R, Raku, S-Lang, SAC, Nial, ZPL, Futhark, and TI-BASIC.

Scalar languages

edit

In scalar languages such as C and Pascal, operations apply only to single values, so a+b expresses the addition of two numbers. In such languages, adding one array to another requires indexing and looping, the coding of which is tedious.

for (i = 0; i < n; i++)
    for (j = 0; j < n; j++)
        a[i][j] += b[i][j];

In array-based languages, for example in Fortran, the nested for-loop above can be written in array-format in one line,

a = a + b

or alternatively, to emphasize the array nature of the objects,

a(:,:) = a(:,:) + b(:,:)

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 vector-based instructions if it has them or by using multiple CPU cores). Some C compilers like GCC at some optimization levels detect and vectorize sections of code that its heuristics determine would benefit from it. Another approach is given by the OpenMP API, which allows one to parallelize applicable sections of code by taking advantage of multiple CPU cores.

Array languages

edit

In array languages, operations are generalized to apply to both scalars and arrays. Thus, a+b expresses the sum of two scalars if a and b are scalars, or the sum of two arrays if they are arrays.

An array language simplifies programming but possibly at a cost known as the abstraction penalty.[3][4][5] Because the additions are performed in isolation from the rest of the coding, they may not produce the optimally most efficient 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 optimizing compiler 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 overhead).

The previous C code would become the following in the Ada language,[6] which supports array-programming syntax.

A := A + B;

APL uses single character Unicode symbols with no syntactic sugar.

A  A + B

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 augmented assignments:

A + B

Analytica

edit

Analytica provides the same economy of expression as Ada.

A := A + B;

BASIC

edit

Dartmouth BASIC had MAT statements for matrix and array manipulation in its third edition (1966).

DIM A(4),B(4),C(4)
MAT A = 1
MAT B = 2 * A
MAT C = A + B
MAT PRINT A,B,C

Mata

edit

Stata'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.

. mata:

: A = (1,2,3) \(4,5,6)

: A
       1   2   3
    +-------------+
  1 |  1   2   3  |
  2 |  4   5   6  |
    +-------------+

: B = (2..4) \(1..3)

: B
       1   2   3
    +-------------+
  1 |  2   3   4  |
  2 |  1   2   3  |
    +-------------+

: C = J(3,2,1)           // A 3 by 2 matrix of ones

: C
       1   2
    +---------+
  1 |  1   1  |
  2 |  1   1  |
  3 |  1   1  |
    +---------+

: D = A + B

: D
       1   2   3
    +-------------+
  1 |  3   5   7  |
  2 |  5   7   9  |
    +-------------+

: E = A*C

: E
        1    2
    +-----------+
  1 |   6    6  |
  2 |  15   15  |
    +-----------+

: F = A:*B

: F
        1    2    3
    +----------------+
  1 |   2    6   12  |
  2 |   4   10   18  |
    +----------------+

: G = E :+ 3

: G
        1    2
    +-----------+
  1 |   9    9  |
  2 |  18   18  |
    +-----------+

: H = F[(2\1), (1, 2)]    // Subscripting to get a submatrix of F and

:                         // switch row 1 and 2
: H
        1    2
    +-----------+
  1 |   4   10  |
  2 |   2    6  |
    +-----------+

: I = invsym(F'*F)        // Generalized inverse (F*F^(-1)F=F) of a

:                         // symmetric positive semi-definite matrix
: I
[symmetric]
                 1             2             3
    +-------------------------------------------+
  1 |            0                              |
  2 |            0          3.25                |
  3 |            0         -1.75   .9444444444  |
    +-------------------------------------------+

: end

MATLAB

edit

The implementation in MATLAB allows the same economy allowed by using the Fortran language.

A = A + B;

A variant of the MATLAB language is the GNU Octave language, which extends the original language with augmented assignments:

A += B;

Both MATLAB and GNU Octave natively support linear algebra operations such as matrix multiplication, matrix inversion, and the numerical solution of system of linear equations, even using the Moore–Penrose pseudoinverse.[7][8]

The Nial example of the inner product of two arrays can be implemented using the native matrix multiplication operator. If a is a row vector of size [1 n] and b is a corresponding column vector of size [n 1].

a * b;

By contrast, the entrywise product is implemented as:

a .* b;

The inner product between two matrices having the same number of elements can be implemented with the auxiliary operator (:), which reshapes a given matrix into a column vector, and the transpose operator ':

A(:)' * B(:);

rasql

edit

The rasdaman query language is a database-oriented array-programming language. For example, two arrays could be added with the following query:

SELECT A + B
FROM   A, B

The R language supports array paradigm 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:

> A <- matrix(1:6, nrow=2)                             # !!this has nrow=2 ... and A has 2 rows
> A
     [,1] [,2] [,3]
[1,]    1    3    5
[2,]    2    4    6
> B <- t( matrix(6:1, nrow=2) )  # t() is a transpose operator                           !!this has nrow=2 ... and B has 3 rows --- a clear contradiction to the definition of A
> B
     [,1] [,2]
[1,]    6    5
[2,]    4    3
[3,]    2    1
> C <- A %*% B
> C
     [,1] [,2]
[1,]   28   19
[2,]   40   28
> D <- C + 1
> D
     [,1] [,2]
[1,]   29   20
[2,]   41   29
> D + c(1, 1)  # c() creates a vector
     [,1] [,2]
[1,]   30   21
[2,]   42   30

Raku

edit

Raku supports the array paradigm via its Metaoperators.[9] The following example demonstrates the addition of arrays @a and @b using the Hyper-operator in conjunction with the plus operator.

[0] > my @a = [[1,1],[2,2],[3,3]];
[[1 1] [2 2] [3 3]]

[1] > my @b = [[4,4],[5,5],[6,6]];
[[4 4] [5 5] [6 6]]

[2] > @a ?+? @b;
[[5 5] [7 7] [9 9]]

Mathematical reasoning and language notation

edit

The matrix left-division operator concisely expresses some semantic properties of matrices. As in the scalar equivalent, if the (determinant of the) coefficient (matrix) A is not null then it is possible to solve the (vectorial) equation A * x = b by left-multiplying both sides by the inverse of A: A?1 (in both MATLAB and GNU Octave languages: A^-1). The following mathematical statements hold when A is a full rank square matrix:

A^-1 *(A * x)==A^-1 * (b)
(A^-1 * A)* x ==A^-1 * b       (matrix-multiplication associativity)
x = A^-1 * b

where == is the equivalence relational operator. 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).

If the system is overdetermined – so that A has more rows than columns – the pseudoinverse A+ (in MATLAB and GNU Octave languages: pinv(A)) can replace the inverse A?1, as follows:

pinv(A) *(A * x)==pinv(A) * (b)
(pinv(A) * A)* x ==pinv(A) * b       (matrix-multiplication associativity)
x = pinv(A) * b

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 a * x = b, for which the solution x = a^-1 * b would require two operations instead of the more efficient x = b / a. The problem is that generally matrix multiplications are not commutative as the extension of the scalar solution to the matrix case would require:

(a * x)/ a ==b / a
(x * a)/ a ==b / a       (commutativity does not hold for matrices!)
x * (a / a)==b / a       (associativity also holds for matrices)
x = b / a

The MATLAB language introduces the left-division operator \ to maintain the essential part of the analogy with the scalar case, therefore simplifying the mathematical reasoning and preserving the conciseness:

A \ (A * x)==A \ b
(A \ A)* x ==A \ b       (associativity also holds for matrices, commutativity is no more required)
x = A \ b

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 ATLAS or LAPACK.[10]

Returning to the previous quotation of Iverson, the rationale behind it should now be evident:

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 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.

Third-party libraries

edit

The use of specialized and efficient libraries to provide more terse abstractions is also common in other programming languages. In C++ several linear algebra libraries exploit the language's ability to overload operators. In some cases a very terse abstraction in those languages is explicitly influenced by the array programming paradigm, as the NumPy extension library to Python, Armadillo and Blitz++ libraries do.[11][12]

See also

edit

References

edit
  1. ^ Stéfan van der Walt; S. Chris Colbert & Ga?l Varoquaux (2011). "The NumPy array: a structure for efficient numerical computation". Computing in Science and Engineering. 13 (2). IEEE: 22–30. arXiv:1102.1523. Bibcode:2011CSE....13b..22V. doi:10.1109/mcse.2011.37. S2CID 16907816.
  2. ^ Iverson, K. E. (1980). "Notation as a Tool of Thought". Communications of the ACM. 23 (8): 444–465. doi:10.1145/358896.358899.
  3. ^ Surana P (2006). Meta-Compilation of Language Abstractions (Thesis).
  4. ^ Kuketayev. "The Data Abstraction Penalty (DAP) Benchmark for Small Objects in Java". Archived from the original on 2025-08-06. Retrieved 2025-08-06.
  5. ^ Chatzigeorgiou; Stephanides (2002). "Evaluating Performance and Power Of Object-Oriented Vs. Procedural Programming Languages". In Blieberger; Strohmeier (eds.). Proceedings - 7th International Conference on Reliable Software Technologies - Ada-Europe'2002. Springer. p. 367. ISBN 978-3-540-43784-0.
  6. ^ Ada Reference Manual: G.3.1 Real Vectors and Matrices
  7. ^ "GNU Octave Manual. Arithmetic Operators". Retrieved 2025-08-06.
  8. ^ "MATLAB documentation. Arithmetic Operators". Archived from the original on 2025-08-06. Retrieved 2025-08-06.
  9. ^ "Metaoperators section of Raku Operator documentation".
  10. ^ "GNU Octave Manual. Appendix G Installing Octave". Retrieved 2025-08-06.
  11. ^ "Reference for Armadillo 1.1.8. Examples of Matlab/Octave syntax and conceptually corresponding Armadillo syntax". Retrieved 2025-08-06.
  12. ^ "Blitz++ User's Guide. 3. Array Expressions". Archived from the original on 2025-08-06. Retrieved 2025-08-06.
edit
尿毒症小便什么颜色 沙和尚是什么动物变的 为什么一进去就软了 红细胞压积偏高是什么原因 海豚吃什么食物
什么什么生机 血压高是什么原因引起的 rbc是什么意思 1997年是什么命 彩云之南是什么意思
不悔梦归处只恨太匆匆是什么意思 奔跑吧什么时候更新 HPV高危亚型52阳性什么意思 肚子胀气用什么药 技压群雄的意思是什么
肩膀疼是什么原因 家的意义是什么 皮肤癣是什么原因造成的 粘膜充血水肿什么意思 被弹颏是什么意思
吃什么水果下火hcv7jop9ns8r.cn 女人月经总是提前是什么原因hcv7jop5ns3r.cn 省长是什么级别hcv9jop0ns3r.cn 1908年中国发生了什么fenrenren.com 雨中漫步是什么意思hcv7jop6ns9r.cn
朱允炆为什么不杀朱棣hcv7jop5ns1r.cn 控诉是什么意思hcv9jop3ns8r.cn 说梦话是什么原因引起的hcv7jop9ns9r.cn 西湖龙井属于什么茶xinmaowt.com 皮蛋不能和什么一起吃hcv8jop7ns0r.cn
柔式按摩是什么意思hcv7jop6ns7r.cn 武则天墓为什么不敢挖hcv9jop2ns9r.cn 七月13号是什么星座hcv9jop4ns1r.cn 为什么老是想吐hcv8jop4ns8r.cn 第六感是什么adwl56.com
屠苏指的是什么hcv9jop2ns4r.cn 嘴发麻是什么原因引起的hcv8jop2ns4r.cn 禄存是什么意思wzqsfys.com 肝昏迷是什么意思hanqikai.com 动销是什么意思hcv8jop5ns7r.cn
百度