Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/python-3.x/17.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Arrays 优雅高效的Numpy数组操作-np.linspace_Arrays_Python 3.x_List_Performance_Numpy - Fatal编程技术网

Arrays 优雅高效的Numpy数组操作-np.linspace

Arrays 优雅高效的Numpy数组操作-np.linspace,arrays,python-3.x,list,performance,numpy,Arrays,Python 3.x,List,Performance,Numpy,我想从arr中创建更漂亮的arr3。我会将对大量行(~10^7)最优雅、最有效的解决方案标记为可接受的答案 >>> arr = np.array([3,30]) >>> arr array([ 3, 30]) 我相信从np.linspace创建一个更高维的数组可以立即到达arr2,甚至可能到达arr3,但我不确定如何实现,尽管如果这不是最好的方法,您不必使用np.linspace 第二个问题:如果需要对arr3的内部两个数组进行转置,那么如何直接从arr

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

>>> arr = np.array([3,30])
>>> arr
array([  3,  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.]])
转置和重塑生成您的
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
(或tile)将其展开:

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)

linspace
接受数组作为端点,因此
arr2
不需要迭代。通过缩放一个数组,可以得到相同的结果。对于
arr3
我认为
repeat
将比
tile
更直接一些(但是
tile
使用
repeat
),我已经看过了文档,但由于某些原因,我不太明白如何按照您描述的方式工作。谢谢!我已将答案标记为已接受,但遗憾的是没有足够的声望点数进行投票。我有足够的点数:)是我没有足够的声望点数——我需要15分才能对答案进行投票。你的声誉分数的确令人印象深刻!
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)