当前位置: 首页 > 面试题库 >

从向量创建矩阵,其中每一行都是向量的移位版本

司徒云
2023-03-14
问题内容

我有一个像这样的numpy数组

import numpy as np

ar = np.array([1, 2, 3, 4])

我想创建一个看起来像这样的数组:

array([[4, 1, 2, 3],
       [3, 4, 1, 2],
       [2, 3, 4, 1],
       [1, 2, 3, 4]])

从而,每行对应于ar通过行索引+1移位的行。

一个简单的实现可能看起来像这样:

ar_roll = np.tile(ar, ar.shape[0]).reshape(ar.shape[0], ar.shape[0])

for indi, ri in enumerate(ar_roll):
    ar_roll[indi, :] = np.roll(ri, indi + 1)

这给了我想要的输出。

我的问题是,是否有更聪明的方法可以避免循环。


问题答案:

这是一种方法NumPy strides,该方法主要使用剩余元素填充,然后strides帮助我们非常有效地创建转换后的版本-

def strided_method(ar):
    a = np.concatenate(( ar, ar[:-1] ))
    L = len(ar)
    n = a.strides[0]
    return np.lib.stride_tricks.as_strided(a[L-1:], (L,L), (-n,n))

样品运行-

In [42]: ar = np.array([1, 2, 3, 4])

In [43]: strided_method(ar)
Out[43]: 
array([[4, 1, 2, 3],
       [3, 4, 1, 2],
       [2, 3, 4, 1],
       [1, 2, 3, 4]])

In [44]: ar = np.array([4,9,3,6,1,2])

In [45]: strided_method(ar)
Out[45]: 
array([[2, 4, 9, 3, 6, 1],
       [1, 2, 4, 9, 3, 6],
       [6, 1, 2, 4, 9, 3],
       [3, 6, 1, 2, 4, 9],
       [9, 3, 6, 1, 2, 4],
       [4, 9, 3, 6, 1, 2]])

运行时测试-

In [5]: a = np.random.randint(0,9,(1000))

# @Eric's soln
In [6]: %timeit roll_matrix(a)
100 loops, best of 3: 3.39 ms per loop

# @Warren Weckesser's soln
In [8]: %timeit circulant(a[::-1])
100 loops, best of 3: 2.03 ms per loop

# Strides method
In [18]: %timeit strided_method(a)
100000 loops, best of 3: 6.7 µs per loop

制作副本(如果您想进行更改,而不仅仅是用作只读数组),对于该strides方法不会对我们造成太大的伤害-

In [19]: %timeit strided_method(a).copy()
1000 loops, best of 3: 381 µs per loop


 类似资料:
  • 问题内容: 所以我有一个 矩阵和一个 向量。我正在尝试编写代码以向量减去矩阵中的每一行。 我目前有一个 循环遍历该循环,并 通过向量减去矩阵中的-th行。 有没有一种方法可以通过向量简单地减去整个矩阵? 谢谢! 当前代码: 这是 矩阵的 第-行, 是向量。我可以这样做,这样就不需要 循环了吗? 问题答案: 在作品,但 只有当轴的联动轴具有相同的尺寸 。这是从矩阵成功减去向量的示例: 之所以可行,是

  • 问题内容: 我想知道最好的方法是用scipy.sparse迭代稀疏矩阵的非零条目。例如,如果我执行以下操作: 输出是 因此看来迭代器正在接触每个元素,而不仅仅是非零条目。我看过API http://docs.scipy.org/doc/scipy/reference/generation/scipy.sparse.lil_matrix.html 并搜索了一下,但是我似乎找不到有效的解决方案。 问题

  • 本文向大家介绍Three.js中矩阵和向量的使用教程,包括了Three.js中矩阵和向量的使用教程的使用技巧和注意事项,需要的朋友参考一下 前言 提起矩阵,很容易让人想起我们曾经学不会的线性代数和离散数学,但是作为图形开发中的核心部分,它代表着每一次的运动和变换,就像鱼不能脱离水一样,矩阵并不是一个可以避之不谈的话题。 好消息是,Three.js帮助我们把许多矩阵运算封装成了一些顶层的方法,并提供

  • 嗨!我正在尝试使用这个方法返回一个DefaultTableModel以在JTable上使用。我正在努力将从数据库中提取的数据格式化为模型友好的格式。放轻松点,这是我第三天做任何形式的编程! 提前致谢:)

  • 本文向大家介绍Numpy之将矩阵拉成向量的实例,包括了Numpy之将矩阵拉成向量的实例的使用技巧和注意事项,需要的朋友参考一下 废话不多说,直接上代码吧! 以上这篇Numpy之将矩阵拉成向量的实例就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持呐喊教程。

  • 本文向大家介绍numpy.linalg.eig() 计算矩阵特征向量方式,包括了numpy.linalg.eig() 计算矩阵特征向量方式的使用技巧和注意事项,需要的朋友参考一下 在PCA中有遇到,在这里记录一下 计算矩阵的特征值个特征向量,下面给出几个示例代码: 在使用前需要单独import一下 官方文档链接:http://docs.scipy.org/doc/numpy/reference/g