【问题标题】:concatenation of matrix with different dimensions不同维度矩阵的串联
【发布时间】:2021-01-29 19:41:49
【问题描述】:

我做了矩阵的串联,如下图所示。

但这不是很有效,因为我的代码是针对这两个矩阵的。是否有可能让它更高效,这样我就不必一直重写代码中的矩阵,而是让它自动工作?

我的意思是我不必在代码中编写我使用的矩阵,但它会自动传递

我想将它放在一个循环中,其中包含将要通过的矩阵的不同变体

import numpy as np
arr1=np.array([[11, 21,31], [12, 22,32], [13, 23,32], [14, 24,34]])
arr2=np.array([1,2,3,4])

a = np.zeros((arr1.flatten().shape[0],2)) #init the new array
a[:,[0]] = arr1.T.flatten()[:,None]  #fill the first column with the values
a[:,[1]] = np.tile(arr2,3)[:,None]  # fill the second column with values

结果

array([[11.,  1.],
       [12.,  2.],
       [13.,  3.],
       [14.,  4.],
       [21.,  1.],
       [22.,  2.],
       [23.,  3.],
       [24.,  4.],
       [31.,  1.],
       [32.,  2.],
       [32.,  3.],
       [34.,  4.]])

【问题讨论】:

  • 自动运行是什么意思?

标签: numpy loops python-3.7 numpy-ndarray


【解决方案1】:

另一种选择:

In [246]: arr1
Out[246]: 
array([[11, 21, 31],
       [12, 22, 32],
       [13, 23, 32],
       [14, 24, 34]])
In [247]: arr3=np.repeat(arr2[:,None],3,1)   # a variation on your tile
In [248]: arr3
Out[248]: 
array([[1, 1, 1],
       [2, 2, 2],
       [3, 3, 3],
       [4, 4, 4]])
In [249]: arr1.ravel(order='F')            # the transpose ravel
Out[249]: array([11, 12, 13, 14, 21, 22, 23, 24, 31, 32, 32, 34])
In [250]: arr3.ravel(order='F')
Out[250]: array([1, 2, 3, 4, 1, 2, 3, 4, 1, 2, 3, 4])

以及分配给预定义数组的替代方法:

In [252]: np.stack((Out[249],Out[250]), axis=1)
Out[252]: 
array([[11,  1],
       [12,  2],
       [13,  3],
       [14,  4],
       [21,  1],
       [22,  2],
       [23,  3],
       [24,  4],
       [31,  1],
       [32,  2],
       [32,  3],
       [34,  4]])

这不一定更快、更直接或更通用。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-07-02
    • 2013-08-15
    • 1970-01-01
    • 2017-03-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多