向量、矩阵和数组数据类型有啥区别?

Posted

技术标签:

【中文标题】向量、矩阵和数组数据类型有啥区别?【英文标题】:What are the differences between vector, matrix and array data types?向量、矩阵和数组数据类型有什么区别? 【发布时间】:2016-03-03 03:31:12 【问题描述】:

R 提供了三种类型来存储同质对象列表:vectormatrixarray

据我所知:

vector 是一维数组的特例 matrix 是二维数组的特例 array 也可以有任何维度级别(包括 1 和 2)。

在向量上使用一维数组和在矩阵上使用二维数组有什么区别?我们是否需要在它们之间进行转换,还是会自动发生?

【问题讨论】:

【参考方案1】:

matrix 和 2D array 之间没有区别:

> x <- matrix(1:10, 2)
> y <- array(1:10, c(2, 5))
> identical(x, y)
[1] TRUE
...

matrix 只是一个更方便的构造函数,还有很多函数和方法只接受二维数组(也就是矩阵)。

在内部,数组只是具有维度属性的向量:

...
> attributes(x)
$dim
[1] 2 5

> dim(x) <- NULL
> x
 [1]  1  2  3  4  5  6  7  8  9 10
> z <- 1:10
> dim(z) <- c(2, 5)
> is.matrix(z)
[1] TRUE

引用language definition:

矩阵和数组只是具有dim 属性的向量和 可选dimnames 附加到向量。

[...]

dim 属性用于实现数组。的内容 数组以列优先顺序存储在向量中,dim 属性是一个整数向量,指定相应的范围 数组。 R 确保向量的长度是 尺寸的长度。一维或多维的长度 可能为零。

向量与一维数组不同,因为后者 具有长度为 1 的 dim 属性,而前者没有 dim 属性。

【讨论】:

“......内部数组只是向量......” - 类函数为向量和一维数组提供不同结果的事实如何? 您的问题是什么? R中有隐式类。 @Roland 也许你应该编辑你的答案以包括“有隐式类”的这些细节。详尽解释如何使用class()mode()typeof() 等函数来最终确定向量、数组和矩阵等之间的差异可能很有用。

以上是关于向量、矩阵和数组数据类型有啥区别?的主要内容,如果未能解决你的问题,请参考以下文章

R中数组,矩阵,数据框有啥区别

R语言里面的向量指的是啥,和数组有啥分别?应用于啥上面?

R语言实战-数据类型-1(标量向量矩阵数组)

vector和平常的数组类型有啥区别

数据结构与数据类型有啥区别?

java的静态数组和动态数组有啥区别?