概述
我有一个问题,我需要找到一个列/行的最佳排列。所以当我把列I与列j交换时,我必须交换第I行和第j行。分数将应用于结果矩阵(模拟退火)。在
它很管用,但我不知道它是否能更快。在
我做什么#!/usr/bin/env python
"""Swap rows and colums of a square integer matrix simultaneously."""
import numpy as np
import random
random.seed(0)
def swap(cm, i, j):
"""
Swap row and column i and j in-place.
Examples
--------
>>> cm = np.array([[0, 1, 2], [3, 4, 5], [6, 7, 8]])
>>> swap(cm, 2, 0)
array([[8, 7, 6],
[5, 4, 3],
[2, 1, 0]])
"""
# swap columns
copy = cm[:, i].copy()
cm[:, i] = cm[:, j]
cm[:, j] = copy
# swap rows
copy = cm[i, :].copy()
cm[i, :] = cm[j, :]
cm[j, :] = copy
return cm
def main(n):
import time
cm = np.random.randint(0, 150000, size=(n, n))
swaps = 10**6
t0 = time.time()
for step in range(swaps):
# Choose what to swap
i = random.randint(0, n - 1)
j = i
while j == i:
j = random.randint(0, n - 1)
cm = swap(cm, i, j)
t1 = time.time()
print("{:0.2f} swaps / sec".format(swaps / (t1 - t0)))
if __name__ == '__main__':
import doctest
doctest.testmod()
main(369)
我所做的一切代码为:152642.58次/秒-158248.08次/秒
cm[:, [i, j]] = cm[:, [j, i]]用于交换列:90562.43交换/秒-97625.79交换/秒
最后
以上就是闪闪大树为你收集整理的c 语言swap交换矩阵两列,交换二维矩阵的两列相同行的最快方法是什么?的全部内容,希望文章能够帮你解决c 语言swap交换矩阵两列,交换二维矩阵的两列相同行的最快方法是什么?所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复