Matlab:将函数应用于数据块

时间:2016-12-06 13:03:36

标签: matlab matrix lambda anonymous-function

我有一个Matlab函数,它将矩阵和chunk_size作为输入,将其重塑为chunk_size维的块。

例如,如果我有以下矩阵:

data=
 1     3
 2     5
 3    42
 4    35
 5    16
 6    48
 7     2
 8    22
 9    20
10    39
11    40

使用chunk_size为3的函数将输出:

data(:,:,1) =
 1     3
 2     5
 3    42
data(:,:,2) =
 4    35
 5    16
 6    48
data(:,:,3) =
 7     2
 8    22
 9    20

原始数据的最后几行被丢弃,因为它们不完全适合一个块。

我现在可以让用户通过函数参数指定要应用于3D矩阵的每个切片的函数。 因此,例如,如果用户想要应用元素的总和,他可以使用matlab提供的sum函数来获取:

data(:,:,1) =
 6    50
data(:,:,2) =
15    99
data(:,:,3) =
24    44

同时,我希望例如允许用户让他在其他维度上应用sum函数,以获得:

data(:,:,1) =
 4
 7
45
data(:,:,2) =
39
21
54
data(:,:,3) =
 9
30
29

我觉得所有这些都可以通过匿名函数或类似的方式获得,但我无法弄清楚如何。

任何帮助都将非常感激。

由于

1 个答案:

答案 0 :(得分:0)

class ArtScene: SCNScene{

    var image = UIImage()
    var geometry = SCNBox()
    var motion = MotionKit()
    var node = SCNNode()


    convenience init(create: Bool) {
        self.init()

        image = UIImage(named: "sf")!
        let lenght: CGFloat = 50
        let width: CGFloat = self.image.size.width
        let height: CGFloat = self.image.size.height
        self.geometry = SCNBox(width: width / 1000 , height: height / 1000, length: lenght / 1000, chamferRadius: 0.005)

        print("Geometry WIDTH: \(self.geometry.width)")
        print("Geometry LENGHT: \(self.geometry.length)")

        self.geometry.firstMaterial?.diffuse.contents = UIColor.red
        self.geometry.firstMaterial?.specular.contents = UIColor.white
        self.geometry.firstMaterial?.emission.contents = UIColor.blue
        node = SCNNode(geometry: self.geometry)
        self.rootNode.addChildNode(node)
   }

func rotate() {
    motion.getDeviceMotionObject { (deviceMotion) in
        let rotationY = deviceMotion.rotationRate.y
        print(rotationY)
        let rotationAction =   SCNAction.rotate(by: CGFloat(1.0), around: SCNVector3(0,rotationY,0), duration: 2.0)
        self.node.runAction(rotationAction)
    }
}

的输出
  

6 50

     

4

     

7

     

45