我有一个数组:

  X = [[5*,  0,     0,      0,      0,      0,      0,      0],
       [9*,  6,     0,      0,      0,      0,      0,      0],
       [4,   6*,    8,      0,      0,      0,      0,      0],
       [0,   7*,    1,      5,      0,      0,      0,      0],
       [9,   3,     3*,     4,      4,      0,      0,      0],
       [4,   5,     5*,     6,      7,      5,      0,      0],
       [4,   5,     6,      8*,     7,      7,      8,      0], 
       [4,   7,     8,      9*,     7,      3,      9,      6]]

我想选择并附加所有用*标记的值。 该方法基本上是从第0行和第1行中选择第0个元素...从第二行和第3行中选择第1个元素,依此类推。

结果集应为:

  Result = ((X[0][0], (X[1][0]), (X[2][1], X[3][1]), (X[4][2], X[5][2]), (X[6][3], X[7][3]))

可以写成:

  Result = ((X[n+0][n], (X[n+1][n]), (X[n+2][n+1], X[n+3][n+1]), (X[n+4][n+2], X[n+5][n+2]), (X[n+6][n+3], X[n+7][n+3]))

  Where n = 0

我怎么做? 我已经应用了,但是没有用:

 Result = []

 for a in X:
     Result.append([[[ a[i][j] ] for i in range(0,8)] for j in range(0,8)])

但是没有结果。 有什么猜想吗?

===============>>#1 票数:2

由于numpy标签,我想我会添加以下内容:

import numpy as np
X = np.array([[5 ,  0,     0,      0,      0,      0,      0,      0],
              [9 ,  6,     0,      0,      0,      0,      0,      0],
              [4,   6 ,    8,      0,      0,      0,      0,      0],
              [0,   7 ,    1,      5,      0,      0,      0,      0],
              [9,   3,     3 ,     4,      4,      0,      0,      0],
              [4,   5,     5 ,     6,      7,      5,      0,      0],
              [4,   5,     6,      8 ,     7,      7,      8,      0], 
              [4,   7,     8,      9 ,     7,      3,      9,      6]])
i = np.array([0, 1, 2, 3, 4, 5, 6, 7])
j = np.array([0, 0, 1, 1, 2, 2, 3, 3])

result = X[i, j]
print result
# [5 9 6 7 3 5 8 9]

通常情况下,要生成i和j,您可以执行以下操作:

n = 8
i = np.arange(n)
j = np.arange(n) // 2

===============>>#2 票数:1

尝试这个:

from itertools import chain, count, tee

lst = [row[i] for row, i in zip(array, chain.from_iterable(zip(*tee(count(), 2))))]

===============>>#3 票数:1 已采纳

如果X有偶数个列表,这将起作用:

>>> [(X[2*i][i], X[2*i+1][i]) for i in range(len(X)//2)]
[(5, 9), (6, 7), (3, 5), (8, 9)]

如果您不介意拼合列表,则适用于任意长度的X

>>> [lst[idx//2] for idx, lst in enumerate(X)]
[5, 9, 6, 7, 3, 5, 8, 9]

===============>>#4 票数:0

在Numpy中:

import numpy as np
x = [['5*','0 ','0 ','0 ','0 ','0 ','0 ','0 '],
     ['9*','6 ','0 ','0 ','0 ','0 ','0 ','0 '],
     ['4 ','6*','8 ','0 ','0 ','0 ','0 ','0 '],
     ['0 ','7*','1 ','5 ','0 ','0 ','0 ','0 '],
     ['9 ','3 ','3*','4 ','4 ','0 ','0 ','0 '],
     ['4 ','5 ','5*','6 ','7 ','5 ','0 ','0 '],
     ['4 ','5 ','6 ','8*','7 ','7 ','8 ','0 '],
     ['4 ','7 ','8 ','9*','7 ','3 ','9 ','6 ']]

a=np.array(x)

然后执行列表理解和/或Numpy切片以获取项目:

[a[i:,j][:2].tolist() for i,j in zip(range(0,7,2),range(0,7,1))]

要么

[a[i*2:,i][:2].tolist() for i in range(len(a)//2)]

要么

a[range(len(a)),np.repeat(range(len(a)//2),2)].reshape(4,2).tolist()

无论如何,输出为:

[['5*', '9*'], ['6*', '7*'], ['3*', '5*'], ['8*', '9*']]

  ask by khan translate from so

未解决问题?本站智能推荐:

3回复

根据特定的布尔条件在Numpy数组中选择一些元素

我有两个这样的清单 我要进行以下操作。 从sampled_series获取第一个元素,并将其与sampled_series所有元素进行cum_array 。 凡在元素cum_array比sampled_series 首次更大,在返回前一个元素cum_array并打破循环
1回复

在特定维度的numpy数组中选择索引[重复]

这个问题在这里已有答案: 索引n维数组与(n-1)d数组 1回答 很难找到明确的标题,但一个例子会清楚地说明。 例如,我的输入是: 如果ix是: 如果想要结果: 我的c数组可以是任意尺寸,也是我想要采样的尺寸。 这听起来像插值,但每次
4回复

如何在numpy数组中选择特定的列?

假设我有20x100 numpy阵列。 我想选择除50号之外的所有列。 所以我跟随这​​个线程在numpy数组中提取特定的列,但它没有帮助。 我试过用 但是给了错误。 在R中很容易做到这一点 但在Python中无法弄明白。 请帮忙。 谢谢
2回复

我想从数组中选择特定范围的索引

我有numpy数组,我想根据其索引号选择一些值。 我正在使用Python3.6 例如: 因此,如您在上面的示例中所见,我想选择索引号: 如果我只是在x中指定数字,这将起作用,但是如果我想使x变量我尝试例如: 其中x + 2 =我想要的第一个索引(起点)。 x-l
3回复

从NumPy数组中选择特定的行和列

我一直在发疯,试图找出我在这里做错了什么愚蠢的事情。 我正在使用NumPy,并且我要从中选择特定的行索引和特定的列索引。 这是我的问题的要点: 为什么会这样呢? 我当然应该能够选择第一行,第二行和第四行以及第一列和第三列? 我期望的结果是:
3回复

从数组中选择每行中的特定列

我试图为numpy数组的每一行选择特定的列元素。 例如,在以下示例中: 我想选择第一行的第一个元素,第二行的第二个元素和第三行的第一个元素。 所以我尝试做以下事情: 但是这会产生以下输出: 这显然不是我想要的。 有没有一种简单的方法可以在不使用循环的情况下做我想做的
4回复

Numpy从2个数组中选择元素

我需要从2个数组中选择n个项,以使索引相同。 因此,例如,我需要从x中随机选择两项,并从y中选择元素,以使y的选定索引与x的索引相同: 假设x_chosen最终成为: x_chosen = [0.1123,0.223]...那么我将需要: 我目前有一个解决方法...但是我想要
4回复

从数组中选择元素来模仿内存使用

假设我有一个非常大的带有N个元素的np.array ,我想只选择一些通过S选择的值。 通常的方法是: 这很好但是使用了很多临时内存。 如果我是正确的,我需要S大小为N的布尔值,加上至少另一个&结果。 在内存使用方面是否有更好的解决方案? 例如,显式循环不需要这样:
3回复

从两个数组的列表中选择元素

我有以下两个数组的列表: 如何制作新清单 我已经尝试过l[0]和l[1]但是它们分别给了我[array([16, 19])]和[array([24, 17])] 。
1回复

numpy - 从具有间距的数组中选择元素

我有一个numpy数组,带有一堆单调递增的值。 说, 还说 我想创建包含的子集的索引的阵列a_arr它通过阵列步骤,选择元件,而是忽略未至少间隔元件thresh从上次选择的路程。 使用算法可能更容易描述: 显然,我可以使用这个函数来做到这一点,但这似乎很慢。 有什么