【问题标题】:Are arrays in Ruby and similarly typed languages vectors?Ruby 和类似类型语言中的数组是向量吗?
【发布时间】:2012-09-27 00:47:25
【问题描述】:

R 将 csv 的数字列表(逗号分隔值,即 1, 2, 3)包装在 c() 函数中,这是 R 核心库的一部分,它将 csv 的数字列表转换为向量。

这些向量看起来像 Ruby 或 Java 数组,除了这些 csv 列表被包裹在 c() 而不是 [] 中。看起来数组实际上是向量的一个子集。这是真的吗?如果是这样,这对数组和矩阵意味着什么?

我发现关于该主题的一次讨论指出数组是静态向量。但在 Ruby 中,数组不是静态的。在 Ruby 中,数组是向量?

【问题讨论】:

  • 在我见过的实例中,Vector 是 Array(一维数组)的子集,而不是相反。
  • 这个问题对我来说似乎不清楚。您是在问为什么 R 不调用这些数组,或者为什么其他语言不调用这些向量?请注意,每种语言都有自己的实现细节,这些细节并不总是与其他语言对其类型的命名方式相匹配。 (在 Python 中,默认容器称为 list,但实际上是用(可调整大小的)数组实现的)。
  • 向量在物理学中被定义为具有方向和大小的“事物”。现在我还没有深入研究物理学(我是一名化学专家),但是这个定义,这是我目前对向量的唯一定义,似乎不适用于这里。如果您对这个问题有任何困惑,那是因为我也有些困惑。
  • 根据我刚才的粗略研究,“向量”和“一维数组”似乎相互指向。但是多维数组是什么,一个矩阵?因此,至少一开始,这里似乎存在一些并行性。主要区别在于静态与动态组件,这在 ruby​​ 中是一个有争议的问题。在 ruby​​ 和其他解释语言而不是编译语言中,数组和向量之间的界限似乎模糊了很多
  • 听起来你已经习惯了数学对象上下文中的“向量”和“数组”(或矩阵)的概念。重要的是要记住,从计算机的角度来看,“额外维度”的概念在将值存储在内存中时几乎没有意义。因此,大多数语言会在内部将高维数组存储为单个值列表,并使用一些额外的簿记信息简单地跟踪行/列。

标签: ruby arrays r math vector


【解决方案1】:

是的,在 R 中,数组只是一个带有属性的向量,这些属性给出了数组的维度。

来自?array

详情:

R 中的数组可以有一个、两个或多个维度。简直是 一个向量,它存储有附加属性,给出 尺寸(属性“dim”)和可选的名称 尺寸(属性“dimnames”)。

二维数组与“矩阵”是一回事。

一维数组通常看起来像向量,但可以处理 某些功能有所不同:“str”确实将它们区分开来 R 的最新版本。

“dim”属性是长度为 1 或更多的整数向量 包含非负值:这些值的乘积必须 匹配数组的长度。

也许自己看这个最简单的方法是看一个向量、一个矩阵和一个更高维的数组,像这样:

a <- array(1:12, dim=c(2,2,3))
m <- matrix(1:4, ncol=2)
v <- c(1,2)

is(a)
# [1] "array"     "matrix"    "structure" "vector"    "vector"  
is(m)
# [1] "matrix"    "array"     "structure" "vector"
is(v)
# [1] "numeric" "vector" 

attributes(a)
# $dim
# [1] 2 2 3
attributes(m)
# $dim
# [1] 2 2
attributes(v)
# NULL

## Finally, try this
v <- 1:12
dim(v) <- c(2,2,3)
v

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2010-11-01
    • 2011-09-12
    • 2023-04-04
    • 2018-03-01
    • 2011-01-04
    • 2023-03-11
    • 2023-02-23
    相关资源
    最近更新 更多