Arrays 优雅高效的Numpy数组操作-np.linspace
我想从arr中创建更漂亮的arr3。我会将对大量行(~10^7)最优雅、最有效的解决方案标记为可接受的答案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 = 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)