c 语言swap交换矩阵两列,交换二维矩阵的两列相同行的最快方法是什么?

我有一个问题,我需要找到一个列/行的最佳排列。所以当我把列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交换/秒

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值