【问题标题】:numpy create new 2D array from existing array,column values as indicesnumpy 从现有数组创建新的二维数组,列值作为索引
【发布时间】:2016-03-22 08:29:16
【问题描述】:

所以我有一个形状为 (4950,3) 的 numpy 数组。从这个数组中,我需要创建新数组(矩阵),其值和索引来自现有数组。

具体来说,

Array1 = array([ [ 0.,1.,0.4284256 ], [0.,2.,0.38090856], [1., 2.,0.32901526] ])。

new Array2 [0,1] = 0.4284256 , Array2[0,2]=0.38090856 and Array2[1,2]= 0.32901526 

现在我使用 for 循环,但我认为必须有一种有效的方法。 A1 and A2 values

for i in range(A1.shape[0]):
    A2[ A1[i,0], A1[i,1] ] = A1[i,2]

【问题讨论】:

  • 新阵列的形状是什么?你能给出你的 Array2 的打印示例吗?可以重塑数组,但有关于尺寸的规则。
  • 您想将 Array1 中的前 2 个元素映射到 Array2 中的坐标。我不认为 reshape 会在这里帮助你。你最好的选择是循环,或者使用 list comprehension 来获得更短的代码。
  • 但是如果他想这样做,为什么它在array1中的最后一行的第三个元素会在array2中的位置1,2?规则是什么?
  • 是的,我想将 Array1 中的前 2 个元素映射为 Array2 的坐标。说,Array1 有行 [1,2,33] 那么,“1”是 x 坐标,“2”是 'y 坐标','33' 是 A2[x][y] 处的值。即我需要设置 A[1,2]=33.
  • @armatita 形状可以是第一列的最大值,A1第二列的最大值。或者为了简化它,我们可以说 shape(100,100) 因为我的 A1 第一列的最大值将是 99。

标签: python arrays numpy matrix


【解决方案1】:

这就是你要找的吗?您可以使用另一个数组的整数值直接索引一个数组的值。

import numpy as np
Array1 = np.array([ [ 0.,1.,0.4284256 ], [0.,2.,0.38090856], [1., 2.,0.32901526] ] )
Array2 = np.zeros(Array1.shape)
Array2[np.int_(Array1[:,0]),np.int_(Array1[:,1])] = Array1[:,2]
print(Array2)

,结果是:

[[ 0.          0.4284256   0.38090856]
 [ 0.          0.          0.32901526]
 [ 0.          0.          0.        ]]

【讨论】:

  • 如果行数超过 3 行,我认为您的代码不起作用!现在它正在工作,因为你有 3 行。
  • 索引适用于任意数量的行,您只需要确保您索引的元素数量就是您要归因的值的数量。您可以索引指令的两侧。
猜你喜欢
  • 2016-10-27
  • 1970-01-01
  • 2015-06-16
  • 1970-01-01
  • 1970-01-01
  • 2011-07-07
  • 2012-04-01
  • 2020-10-25
  • 2023-01-04
相关资源
最近更新 更多