R语言(1)——向量


1、向量的基础


1.1 一个向量中存储的数据的模式必须相同

1.2 向量中的值在内存中是连续存储的,因此向量没有添加或删除某元素的功能,如果想达到添加或删除的效果,创建一个新的变量再将元向量的指针指向它。

如:x<-c(x[1:3],168,x[4])

1.3 向量调用: 

</pre><pre name="code" class="plain">#方法1,每次循环,i的取值为x中的序号
for(i in length(x)){
}
#方法2,每次循环,i的取值为x中的一个值
for(i in x){

}
#注意,如果x为空,for(i in 1:length(x)) 语句会出错,r会进行两次循环(i分别取1和0),这显然不是我们想要的。

1.4 向量、矩阵和数组本质上都特殊的向量。

1.5 向量不需要声明,但直接调用一个不存在的向量中的某个元素,则会报错。

因此,应当这样操作:

>y<-vector(length=2)
>y[1]<-5
>y[2]<-12
另外,创建一个空的向量的方法:

#方法1
x<-c()
#方法2
x<-vector()
#方法3
x<-NULL

1.6 循环补齐

#较短的向量会自动循环补齐,以填充满所需的长度
> c(1,2,3)+c(5,6,3,4,5,6,4)
[1] 6 8 6 5 7 9 5
#实质上是:c(1,2,3,1,2,3,1)+c(5,6,3,4,5,6,4)
</pre><p></p><h2>2 向量运算</h2><p>2.1 基本理念:向量的每个运算符都是一个函数,加减乘除取模等普通运算,都是针对向量中的每个元素进行的,如果运算向量数目不匹配,则采用循环补齐</p><p>2.2 运算符(可跳过)</p><p> + 加</p><p>- 减</p><p>* 乘</p><p>/ 除</p><p>%% 取模</p><p>%*% 向量点乘,注意,这个运算显然是针对整个向量的。</p><p></p><h2>3 向量索引(重要)</h2><p></p><p>3.1 索引格式:向量1[向量2],它的返回结果是向量1中索引为向量2的那些元素</p><p></p><p></p><pre name="code" class="plain">> y<-c(1,2,3,4,5,6,7)
> y
[1] 1 2 3 4 5 6 7
> y[c(1,2,3)]
[1] 1 2 3
> y<-c(4,5,3,7,9,10)
> y[c(1,3)]
[1] 4 3
> y[1:5]
[1] 4 5 3 7 9
> y[c(1,1,3)]#选择的元素是可以复制的
[1] 4 4 3


3.2 负数表示把相应的元素删除,输出剩下的元素

> y[c(1,1,3)]
[1] 4 4 3
> y
[1]  4  5  3  7  9 10
> y[-1]
[1]  5  3  7  9 10
> y[-1:-3]
[1]  7  9 10

3.3 巧用length()帮助筛选

> y[-1]
[1]  5  3  7  9 10
#选择y除了最后一个元素的所有元素
#方法1
> y[1:length(y)-1]
[1] 4 5 3 7 9
#方法2
> y[-length(y)]
[1] 4 5 3 7 9


4 向量创建方式

4.1 v<-c(1,2,3) 

 (c的含义为combine)

4.2 v<-1:10 

4.3 seq()

(由sequence得来)

#方法1
> v<-seq(0,100,5)
> v
 [1]   0   5  10  15  20  25  30  35  40
[10]  45  50  55  60  65  70  75  80  85
[19]  90  95 100

#方法2
> v<-seq(from=12,to=30,by=3)
> v
[1] 12 15 18 21 24 27 30

#方法3
> v<-seq(from=1.1,to=2,length=10)
> v
 [1] 1.1 1.2 1.3 1.4 1.5 1.6 1.7 1.8 1.9
[10] 2.0

4.4 rep() 重复向量常量

> rep(c(5,12,13),3)
[1]  5 12 13  5 12 13  5 12 13

5 all() 与any()

> x<-1:10
> all(x>8)
[1] FALSE
> any(x>8)
[1] TRUE

6向量化运算(重要)

6.1 向量化运算指:如果希望对向量v中每一元素应用function f(),在很多情况向可以简单地对向量v调用f()即可,这样不仅可以使代码简洁易读,还可使R的运算效率成百上千的提高。注意,运算符在r中的本质也是函数,因此,可以这样向量化:

> u<-c(2,4,5)
> v<-c(4,3,2)
> u>v
[1] FALSE  TRUE  TRUE


#向量输入,向量输出
> f<-function(x) return(x^2)
> x<-c(1,2,3)
> f(x)
[1] 1 4 9

#向量输入,矩阵输出
> f<-function(x) return(cbind(x,x^2))
> x<-c(1,2,3)
> f(x)
     x  
[1,] 1 1
[2,] 2 4
[3,] 3 9


6.2 ifelse() 是向量化的重要方法。


7 筛选

7.1 筛选机制:生成筛选索引

这里的关键是一定要理解R处理筛选背后的机制

> z<-c(3,4,-4,3)
> z<-z[z*z>10]
> z
[1]  4 -4


</pre><pre>

上面是对vector z的一个筛选,下面来讲解这次筛选背后的处理原理

> z*z>10
[1] FALSE  TRUE  TRUE FALSE

注意,>也是一个函数,这个函数作用是比较z*z与10的大小,并且返回比较的结果向量。


> z<-z[z*z>10]
这一步代码的实质是:

z<-z[FALSE  TRUE  TRUE FALSE]
这样,我们就达到了筛选的目的。


7.2 使用subset()筛选

使用subset()筛选和使用筛选索引的区别在于,对NA值的处理

> c<-c(1,3,1:3,NA,5)
> c[c>2]
[1]  3  3 NA  5
> subset(c,c>2)
[1] 3 3 5

显然,筛选索引无法去除掉NA值,而subset()函数可以把NA自动剔除掉。


7.3 使用witch()

使用witch()函数可生成满足条件的元素在原向量中的索引。

> c
[1]  1  3  1  2  3 NA  5
> which(c>2)
[1] 2 5 7


8 NA 与NULL

8.1 NA与NULL的含义 

NA代表缺失值;NULL代表不存在的值,而非存在而不知道的值。

> a<-c(1,2,NULL,3)
> mean(a)
[1] 2
> a<-c(1,2,NA,3)
> mean(a)
[1] NA


NULL没有模式,长度为0;而NA长度为一,如下:

> length(NULL)
[1] 0
> length(NA)
[1] 1





重点知识点:循环补齐;筛选;向量化;所有运算符都是函数





























  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
基于R语言的自编码器(autoencoder)可视化图像的方法,可以通过以下步骤进行: 1. 导入必要的库和数据集,比如MNIST手写数字数据集。 ```R library(keras) library(ggplot2) library(gridExtra) mnist <- dataset_mnist() x_train <- mnist$train$x y_train <- mnist$train$y x_test <- mnist$test$x y_test <- mnist$test$y ``` 2. 对图像进行预处理,将像素值归一化到0-1之间。 ```R x_train <- x_train / 255 x_test <- x_test / 255 ``` 3. 构建自编码器模型,使用Keras库实现。 ```R input_img <- layer_input(shape = c(784)) encoded <- input_img %>% layer_dense(units = 128, activation = "relu") %>% layer_dense(units = 64, activation = "relu") %>% layer_dense(units = 32, activation = "relu") decoded <- encoded %>% layer_dense(units = 64, activation = "relu") %>% layer_dense(units = 128, activation = "relu") %>% layer_dense(units = 784, activation = "sigmoid") autoencoder <- keras_model(inputs = input_img, outputs = decoded) ``` 4. 训练自编码器模型,并使用测试集对其进行评估。 ```R autoencoder %>% compile(optimizer = 'adam', loss = 'binary_crossentropy') autoencoder %>% fit(x_train, x_train, epochs = 50, batch_size = 256, shuffle = TRUE, validation_data = list(x_test, x_test)) decoded_imgs <- predict(autoencoder, x_test) ``` 5. 可视化原始图像和重构图像,对比两者的差异。 ```R n <- 10 original <- x_test[1:n, ] reconstructed <- decoded_imgs[1:n, ] original_m <- matrix(original, ncol = 28, byrow = TRUE) reconstructed_m <- matrix(reconstructed, ncol = 28, byrow = TRUE) original_gg <- ggplot() + geom_raster(aes(x = 1:28, y = 1:28, fill = original_m)) + scale_fill_gradient(low = "white", high = "black") reconstructed_gg <- ggplot() + geom_raster(aes(x = 1:28, y = 1:28, fill = reconstructed_m)) + scale_fill_gradient(low = "white", high = "black") grid.arrange(original_gg, reconstructed_gg, ncol = 2) ``` 以下是支持向量机(SVM)结果可视化的方法: 1. 导入必要的库和数据集,比如Iris鸢尾花数据集。 ```R library(e1071) library(ggplot2) iris <- datasets::iris() ``` 2. 对数据集进行预处理,将类别变量转化为数值变量,并将数据集分为训练集和测试集。 ```R iris$Species <- as.numeric(iris$Species) set.seed(123) train_index <- sample(1:nrow(iris), 100) train_data <- iris[train_index, ] test_data <- iris[-train_index, ] ``` 3. 构建SVM模型,并对其进行训练和测试。 ```R svm_model <- svm(Species ~ ., data = train_data, kernel = "linear", cost = 1) svm_pred <- predict(svm_model, test_data[-4]) svm_acc <- sum(svm_pred == test_data[, 5]) / nrow(test_data) * 100 ``` 4. 可视化SVM结果,使用ggplot2库绘制分类边界和数据点。 ```R svm_plot <- ggplot(train_data, aes(x = Sepal.Length, y = Petal.Length, color = factor(Species))) + geom_point(size = 3) + geom_smooth(method = "svm", formula = y ~ x, data = train_data, size = 1) + scale_color_discrete(name = "Species") + ggtitle(paste0("SVM Accuracy: ", svm_acc, "%")) svm_plot ``` 绘制的图像中,不同颜色的点表示不同类别的数据点,分类边界用实线表示。我们可以通过调整SVM模型的参数和选择不同的kernel,来获得更好的分类效果。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值