Swift:如何在多维数组中找到沿轴的最大值的索引

时间:2018-03-20 14:07:15

标签: arrays swift

我想在多维数组中找到沿轴0的最大值的索引。这可以使用pythonhttps://docs.scipy.org/doc/numpy/reference/generated/numpy.argmax.html

numpy中完成

python

a = array([[1,2,3],[4,3,1]])
a.argmax(axis=0)

将返回:

array([1, 1, 0])

如何在swift完成同样的事情?

2 个答案:

答案 0 :(得分:0)

尝试同伴代码:

<nav class="navbar navbar-expand-sm navbar-dark bg-dark" id="nav-main">
  <a class="navbar-brand" href="#">Navbar</a>
  <ul class="nav navbar-nav">
    <li class="nav-item">
      <a href="#" class="nav-link">Home <span class="sr-only">(current)</span></a>
    </li>
    <li class="nav-item">
      <a href="#" class="nav-link">Features</a>
    </li>
    <li class="nav-item">
      <a href="#" class="nav-link">Pricing</a>
    </li>
    <li class="nav-item">
      <a href="#" class="nav-link">About</a>
    </li>
  </ul>
  <form class="form-inline ml-auto">
    <input type="text" class="form-control" placeholder="Search">
    <button class="btn btn-outline-success" type="submit">Search</button>
  </form>
</nav>

这不是一个严谨的演示 但我认为这可以激励你。

答案 1 :(得分:0)

一个简单的实现,实际上并不是非常安全,因为它基于所有子数组具有相同长度且不为空的前提条件:

extension Array where Element == [Int] {
    func axisItems(axis: Int) -> [[Int]] {
        // let's suppose all elements have the same length
        guard !isEmpty else { return [] }

        switch axis {
        case 0:
            // transpose
            return self[0].indices.map { index in self.map { $0[index] } }
        case 1:
            return self
        default:
            fatalError("Invalid axis: \(axis)")
        }
    }

    func argMax(axis: Int) -> [Int] {
         // add indices to items, find max item and return its index
        return axisItems(axis: axis).map { $0.enumerated().max { $0.1 < $1.1 }!.0 }
    }
}

let array: [[Int]] = [[1, 2, 3], [4, 3, 1]]
print(array.argMax(axis: 0)) // [1, 1, 0]
print(array.argMax(axis: 1)) // [2, 0]

我正在调换axis = 0的矩阵。

对于具有更高维度的数组,这不容易扩展。为此,最好使用自定义对象而不是数组。