matlab如何使行向量中的元素平方?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了matlab如何使行向量中的元素平方?相关的知识,希望对你有一定的参考价值。

我写了个函数,其中x是行向量,我要把x的元素平方,怎么么办?

matlab如何使行向量中的元素平方的方法。

如下参考:

1.首先,使用1:7生成行向量,然后加上'来转置得到列向量(MATLAB数组中的第一个维度是列方向)。使用circshift(A,3)将矢量向下滚动3个元素。

2.如果您想滚动行向量,您不能使用circshift(A,3),相反,您应该使用circshift(A,[0,3])[0,3]来表示滚动0的第一个维度和滚动3的第二个维度。

3.当然,您可以通过将矩阵元素向右移动来转换二维数组,如图所示。

4.移动向量的分量为负值,如图所示,[-1,-2]表示从1向上移动到2的分量也可以写成列向量[-1,-2]。

5.circshift的另一个用途是沿着维度1(垂直方向)和维度2(水平方向)分别移动两个单位。

参考技术A

1、首先,用1:7产生行向量,再加 ' 将其转置得到列向量(MATLAB数组中第一维是列方向)使用circshift(A,3)将向量向下滚动3个元素。

2、如果想对行向量进行滚动,就不可以使用circshift(A,3),而应该使用circshift(A,[0,3])[0,3]表示第一维滚动0,第二维滚动3。

3、自然地,可以对二维数组进行平移,如图,将矩阵元素向右下平移。

4、移动向量分量是负值,如图,[-1,-2]表示向上1向左2移动分量还可以写作列向量[-1;-2]。

5、circshift的另一种用法是circshift(数组,移动距离,移动维度)分别沿着维度1(纵向)和维度2(横向)移动两单位。

参考技术B Matlab中矩阵的平方和矩阵中每个元素的平方
2009-10-14 10:15 星期三
  设t = [2 4
  
   4 2]
  
   则
  
   >> t.^2
  
   ans =
  
   4 16
   4 16
  
   而
  
   >> t^2
  
   ans =
  
   12 24
   12 24
  
   可见t^2是矩阵平方,t.^2是矩阵中每个元素的平方。
  
   PS: 若t不是方阵,则t^2会出错
参考技术C y=x.^2本回答被提问者采纳

如何使用 vDSP / Accelerate in swift for iOS 计算向量元素的平方根

【中文标题】如何使用 vDSP / Accelerate in swift for iOS 计算向量元素的平方根【英文标题】:How to compute the square root of a vector elementwise using vDSP / Accelerate in swift for iOS 【发布时间】:2020-02-04 18:35:22 【问题描述】:

我有一个类似于[Float](repeating: 1.0, count: 42000) 的向量,我想使用 Accelerate 框架计算每个元素的平方根,但不存在与Apple Accelerate Framework scale and normalize a vector 中所述相反的vDSP_vsqrt 函数。我该怎么做?

【问题讨论】:

【参考方案1】:

vForce Swift 覆盖使语法更简单:

vForce.sqrt(vector: AccelerateBuffer)

看看:https://github.com/apple/swift/blob/master/stdlib/public/Darwin/Accelerate/vForce_Operations.swift

...和...

https://developer.apple.com/videos/play/wwdc2019/718/

【讨论】:

【参考方案2】:

看来要调用的正确函数是来自vForcevvsqrtf

以下是the documentation 的用法示例:

var x: [Float] = [100, 10000, 64, 144]
var y = [Float](repeating: 0, count: x.count)
var n = Int32(x.count)

vvsqrtf(&y, &x, &n)

print(y) // [10.0, 100.0, 8.0, 12.0]

请注意,您还可以“就地”计算平方根:

var data = [Float](repeating: 25.0, count: input.count)
let n = Int32(data.count)

vvsqrtf(&data, data, &n)

【讨论】:

【参考方案3】:

我建议制作辅助函数来包装 vvsqrtf,以公开更 Swift 友好的 API:

import Accelerate

extension Array where Element == Float 
    func squareRootedElements() -> [Float] 
        if self.isEmpty  return [] 

        var output = Array(repeating: 0, count: self.count)
        var count = Int32(self.count)

        vvsqrtf(&output, self, &count)

        return output
    

    mutating func squareRootElements() 
        if self.isEmpty  return 

        var count = Int32(self.count)

        vvsqrtf(&self, self, &count)
    


var squares = stride(from: 0 as Float, through: 10, by: +1).map  $0 * $0 
print(squares)
print(squares.squareRootedElements())

【讨论】:

不需要缓冲区指针,只需vvsqrtf(&output, self, &count) @JeremyCochoy 哦,如果vvsqrtf 的第一个和第二个参数使用相同的缓冲区,它会就地覆盖吗? @JeremyCochoy 更新:) @gasher729 这不是真的。这里产生的唯一开销是函数调用的恒定时间开销,如果您担心,它甚至可以内联。它所做的事情与您自己拨打 vvsqrtf 所做的事情相同,但复制/粘贴更少 此外,您的前提有点误导。您使用加速来加速可并行化操作。它的附加值是它可以在 CPU 或 GPU 中使用 SIMD 指令来加速你的代码,它的加速因子与你的数据大小成正比。它的增值不是消除单个快速函数调用的开销(更不用说这种开销在数据大小上是 O(1) 的事实)。

以上是关于matlab如何使行向量中的元素平方?的主要内容,如果未能解决你的问题,请参考以下文章

matlab中如何提取一个向量中的元素作为一个变量的下标?

向量范数和矩阵范数

如何将给定矩阵的每一行中的所有元素与给定向量的相应元素相乘并在 MATLAB 中求和?

在 Matlab 中访问单元格中的向量

matlab中的mean函数是啥意思啊,如何使用

matlab怎样求矩阵每一行的平方和?