arrays - 优雅高效的 Numpy 数组运算 - np.linspace

标签 arrays python-3.x list performance numpy

我想从arr创建更漂亮的arr3。我会将对于大量行(~10^7)最优雅和最有效的解决方案标记为可接受的答案。

>>> arr = np.array([3,30])
>>> arr
array([  3,  30])
>>> arr2 = np.array([np.linspace(arr[i]/3, arr[i], 3).reshape(-1,1)
                     for i in range(len(arr))])
>>> list(arr2)
[array([[1.],
        [2.],
        [3.]]),
 array([[10.],
        [20.],
        [30.]])]
>>> arr3 = np.tile(arr2,4)
>>> list(arr3)
[array([[1., 1., 1., 1.],
        [2., 2., 2., 2.],
        [3., 3., 3., 3.]]),
 array([[10., 10., 10., 10.],
        [20., 20., 20., 20.],
        [30., 30., 30., 30.]])]

我相信从 np.linspace 创建一个更高维的数组可以立即到达 arr2 甚至 arr3 但我不确定如何,尽管如果这不是最好的方法,您不必使用 np.linspace。

第二个问题:如果需要转置arr3内部的两个数组,如何直接从arr实现这一点?从 arr3 来看很简单,但也许有一种更直接的方法类似于原始问题。

谢谢!

最佳答案

In [38]: arr
Out[38]: array([ 3, 30])

linspace 允许我们指定数组作为端点:

In [39]: np.linspace(arr/3, arr, 3)
Out[39]: 
array([[ 1., 10.],
       [ 2., 20.],
       [ 3., 30.]])

转置和 reshape 生成您的arr2:

In [40]: np.linspace(arr/3, arr, 3).T
Out[40]: 
array([[ 1.,  2.,  3.],
       [10., 20., 30.]])

In [41]: np.linspace(arr/3, arr, 3).T.reshape(2,-1,1)
Out[41]: 
array([[[ 1.],
        [ 2.],
        [ 3.]],

       [[10.],
        [20.],
        [30.]]])

然后只需使用repeat(或平铺)即可展开它:

In [42]: np.linspace(arr/3, arr, 3).T.reshape(2,-1,1).repeat(4,-1)
Out[42]: 
array([[[ 1.,  1.,  1.,  1.],
        [ 2.,  2.,  2.,  2.],
        [ 3.,  3.,  3.,  3.]],

       [[10., 10., 10., 10.],
        [20., 20., 20., 20.],
        [30., 30., 30., 30.]]])

应用这些操作的另一个命令:

np.linspace(arr/3,arr,3).repeat(4,1).reshape(3,2,4).transpose(1,0,2)

关于arrays - 优雅高效的 Numpy 数组运算 - np.linspace,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/67041143/

相关文章:

c - 为什么数组元素的总和最终总是打印相同的值?

arrays - 在 VBScript 中对多维数组进行排序

python - 没有足够的值从字典项 : expected 3 values, 中解压得到 2

python - 如何在python 3中获取JSON的纬度和经度字段特定值?

java - 按钮中的按钮 (android.content.Context) 无法应用于 (Java.lang.Object)

python - 获取列表中重复元素的索引范围

list - 通过递归扩展 Prolog 目标?

list - 当其他小部件在 flutter 中位于其顶部时,如何防止呈现给定小部件?

python - 在 python 中从一个列表创建两个列表?

c++ - 无法将 vector<int> 转换为 int* 用于 bool testPIN