我前几天遇到了这个奇怪的矩阵操作,无法弄清楚它在做什么。 考虑:
a<-matrix(nrow=2,ncol=2,c(9,8,7,6))
b<-matrix(nrow=2,ncol=2,c(1,2,1,2))
a[b]
哇!你怎么能用矩阵来分配另一个矩阵?无论如何 - 这是结果
a[b]
#[1] 9 6
我想也许b正在提供索引以引用a(即得到1,1然后得到2,2。但如果发生了这种情况,当你这样做时,规则会被抛出窗外
a<-matrix(nrow=3,ncol=3,c(9,8,7,6,5,4,3,2,1))
b<-matrix(nrow=3,ncol=3,c(1,2,3,2,2,2,1,1,1))
a[b]
#[1] 9 8 7 8 8 8 9 9 9
有谁知道这里发生了什么?
答案 0 :(得分:2)
b
被视为数字:
as.numeric(b)
#[1] 1 2 3 2 2 2 1 1 1
a[as.numeric(b)]
#[1] 9 8 7 8 8 8 9 9 9
你必须记住,除了有一个二维ij
(行x列)索引之外,矩阵也有一维的,其中每个元素按顺序分配一个数字,从顶部开始-left元素并沿着列向下。因此a[1, 1]
与a[1]
相同,a[2, 2]
与a[5]
相同。因此a[b]
会为您c(a[1], a[2], a[3], a[2],...,a[1])
提供c(a[1,1], a[2,1], a[3,1], a[2,1], a[2,1],..., a[1,1])
,与<?php
include_once 'includes/main/WebUI.php';
require_once 'includes/Loader.php';
require_once 'modules/SMSNotifier/SMSNotifier.php';
$tonumbers = array('994255xxxx');
$message = "Test From Ramesh";
SMSNotifier::fireSendSMS($message, $tonumbers);
相同。
答案 1 :(得分:1)
矩阵本质上是具有维度属性的数字向量。在R中,使用“列主要顺序”存储矩阵,这意味着矩阵按列填充。这意味着以下内容:
a <- matrix(1:4, nrow = 2)
> a
# [,1] [,2]
#[1,] 1 3
#[2,] 2 4
由于它也是一个向量,您仍然可以使用单个索引访问a
的元素。
> a[1]
#1
> a[2]
#2
> a[3]
#3
当您在括号运算符之间放置一个变量时,它会尝试将您的变量强制转换为整数向量,这样它就会成为数字向量a
的一组索引。
为了更好地理解,您可以尝试以下方法:
a<-matrix(nrow=3,ncol=3,c(9,8,7,6,5,4,3,2,1))
b<-matrix(nrow=3,ncol=3,c(1,2,3,2,2,2,1,10,1)) # a[10] = NA
> a[b]
# [1] 9 8 7 8 8 8 9 NA 9
由于括号将矩阵强制转换为整数向量,您甚至可以设想具有浮动值的b
矩阵:
b<-matrix(nrow=3,ncol=3,c(1.1,2.1,3.9,2.8,2,2,1,10.5,1))
> a[b]
# [1] 9 8 7 8 8 8 9 NA 9
这是因为,如前所述:
> as.integer(b) # same as as.integer(c(1.1,2.1,3.9,2.8,2,2,1,10.5,1))
# 1 2 3 2 2 2 1 10 1