我有两个numpy数组,定义网格的x和y轴.例如:
x = numpy.array([1,2,3])
y = numpy.array([4,5])
Run Code Online (Sandbox Code Playgroud)
我想生成这些数组的笛卡尔积来生成:
array([[1,4],[2,4],[3,4],[1,5],[2,5],[3,5]])
Run Code Online (Sandbox Code Playgroud)
在某种程度上,由于我需要在循环中多次执行此操作,因此效率不高.我假设将它们转换为Python列表并使用itertools.product
并返回到numpy数组并不是最有效的形式.
这个问题基于这个较老的问题:
给定一个数组:
Run Code Online (Sandbox Code Playgroud)In [122]: arr = np.array([[1, 3, 7], [4, 9, 8]]); arr Out[122]: array([[1, 3, 7], [4, 9, 8]])
鉴于其指数:
Run Code Online (Sandbox Code Playgroud)In [127]: np.indices(arr.shape) Out[127]: array([[[0, 0, 0], [1, 1, 1]], [[0, 1, 2], [0, 1, 2]]])
我怎样才能将它们整齐地叠在一起形成一个新的2D阵列?这就是我想要的:
Run Code Online (Sandbox Code Playgroud)array([[0, 0, 1], [0, 1, 3], [0, 2, 7], [1, 0, 4], [1, 1, 9], [1, 2, 8]])
Divakar的这个解决方案是我目前用于2D阵列的解决方案:
def indices_merged_arr(arr):
m,n = arr.shape
I,J = np.ogrid[:m,:n]
out = np.empty((m,n,3), dtype=arr.dtype)
out[...,0] = I
out[...,1] = …
Run Code Online (Sandbox Code Playgroud) 我有一个 3d 数组,如下所示:
ThreeD_Arrays = np.random.randint(0, 1000, (5, 4, 3))
array([[[715, 226, 632],
[305, 97, 534],
[ 88, 592, 902],
[172, 932, 263]],
[[895, 837, 431],
[649, 717, 39],
[363, 121, 274],
[334, 359, 816]],
[[520, 692, 230],
[452, 816, 887],
[688, 509, 770],
[290, 856, 584]],
[[286, 358, 462],
[831, 26, 332],
[424, 178, 642],
[955, 42, 938]],
[[ 44, 119, 757],
[908, 937, 728],
[809, 28, 442],
[832, 220, 348]]])
Run Code Online (Sandbox Code Playgroud)
现在我想把它变成DataFrame
这样:
添加一个Date
列,如指示和列名A
, …
我有以下问题。我有一个3D数组,例如
matrix = np.zeros((30,30,100))
每个条目都是一个坐标并获取一个值。因此matrix [0][0][0]
,坐标x = 0,y0,z = 0且值为0。现在我想将所有值存储在这样的csv中,其中前3行是坐标,第4行是相应值:
numpy是否有一种快速的方法来做到这一点?