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

numpy数组到置换矩阵

公良运锋
2023-03-14
问题内容
np.array([1,2,3])

我有numpy数组。我想把它变成一个numpy数组,每个1:1排列的元组。像这样:

np.array([
    [(1,1),(1,2),(1,3)],
    [(2,1),(2,2),(2,3)],
    [(3,1),(3,2),(3,3)],
])

关于如何有效执行此操作的任何想法?我需要执行此操作数百万次。


问题答案:

如果您使用的是numpy,请不要使用元组。使用其功能并添加另一个尺寸为2的尺寸。我的建议是:

x = np.array([1,2,3])
np.vstack(([np.vstack((x, x, x))], [np.vstack((x, x, x)).T])).T

要么:

im = np.vstack((x, x, x))
np.vstack(([im], [im.T])).T

对于一般数组:

ix = np.vstack([x for _ in range(x.shape[0])])
return np.vstack(([ix], [ix.T])).T

这将产生您想要的:

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

       [[2, 1],
        [2, 2],
        [2, 3]],

       [[3, 1],
        [3, 2],
        [3, 3]]])

但是作为3D矩阵,您可以在查看其形状时看到:

Out[25]: (3L, 3L, 2L)

随着数组大小变大,这比带有排列的解决方案更有效。将我的解决方案与@Kasra的收益相比,我的收益为1毫秒,而排列为100数组的收益为46毫秒。@AshwiniChaudhary的解决方案效率更高。



 类似资料:
  • 问题内容: 我正在尝试创建具有混合数据类型(字符串,整数,整数)的NumPy数组/矩阵(Nx3)。但是,当我通过添加一些数据来添加此矩阵时,出现错误: TypeError:无效的类型提升 。拜托,有人可以帮我解决这个问题吗? 当我用示例数据创建一个数组时,NumPy将矩阵中的所有列都转换为一种“ S”数据类型。而且我无法为数组指定数据类型,因为当我执行此操作时, res = np.array([“

  • 问题内容: 我有2个形状(5,1)的numpy数组,说:a = [1,2,3,4,5] b = [2,4,2,3,6] 我如何制作一个矩阵,将每个第i个元素与每个第j个元素相乘?喜欢: 不使用forloops?我可以使用重塑,缩小或乘法的任何组合吗? 现在,我沿着行和列创建每个数组的aa * b拼接,然后将元素明智地相乘,但是在我看来,肯定有一种更简单的方法。 问题答案: 使用numpy.oute

  • 本文向大家介绍Python numpy数组转置与轴变换,包括了Python numpy数组转置与轴变换的使用技巧和注意事项,需要的朋友参考一下 这篇文章主要介绍了Python numpy数组转置与轴变换,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下 矩阵的转置 矩阵的内积 轴变换 二维轴变换 1.两轴交换 三维轴变换 1.这种变化有点麻烦,不好理

  • 问题内容: 我正在围绕ArUco增强现实库(基于OpenCV)编写一个薄包装纸。我尝试构建的接口非常简单: Python将图像传递给C ++代码; C ++代码检测标记并将标记的位置和其他信息作为字典元组返回给Python。 但是,我不知道如何在Python中表示图像以将其传递给C ++。对于GUI和摄像机管理,我将使用PyQt,因此起初它将是QImage,但我不能简单地将其传递给OpenCV(或

  • 问题内容: 我要执行以下操作: 不使用循环。最后,A和B包含相同的信息,但索引不同。 我必须指出,尺寸1,2,3和4可以相同或不同。因此,numpy.reshape()似乎很困难。 问题答案: 请注意:Jaime的答案更好。NumPy正是为此目的而提供的。 在numpy中执行此操作的规范方法是使用的可选置换参数。在您的情况下,从i转到,排列是,例如: 或者使用np.einsum ; 这可能是其预期

  • 问题内容: 我正在尝试将代表黑白图像的2D Numpy数组转换为3通道OpenCV数组(即RGB图像)。 基于代码示例和文档,我正尝试通过Python执行此操作,例如: 但是,对CvtColor()的调用将引发以下cpp级异常: 我究竟做错了什么? 问题答案: 您的代码可以固定如下: 简短说明: 数据类型不受OpenCV的支持(它支持,,,,,,) 无法处理numpy数组,因此必须将两个参数都转换

  • 问题内容: 注意: 这要求与通常的元组到数组的转换相反。 我必须将一个参数传递给(包装的c ++)函数作为嵌套元组。例如,以下作品 而以下 不 不幸的是,我想使用的参数是一个numpy数组。对于某些N,该阵列的尺寸始终为2xN,这可能会很大。 有没有简单的方法可以将其转换为元组?我知道我可以循环遍历,创建一个新的元组,但是如果numpy数组提供了一些不错的访问权限,我会更喜欢。 如果不可能如我所愿

  • 问题内容: 我使用Python和NumPy,“移调”有一些问题: 调用不转置数组。例如,如果为,则它正确转置,但我需要的转置。 问题答案: 它的工作完全符合预期。一 维 数组的转置仍然是 一维 数组!(如果您习惯使用matlab,从根本上来说就没有1D数组的概念。Matlab的“ 1D”数组是2D。) 如果要将一维矢量转换为二维数组然后转置,只需对其进行切片(或者,它们是相同的,可读性更高)。 一