用一行代码获取python中的数组元素
我需要使用这个漂亮的np数组用一行代码获取python中的数组元素,python,list,numpy,Python,List,Numpy,我需要使用这个漂亮的np数组 import numpy as np train_predicteds = np.asarray([ [[0.1, 0.2, 0.3], [0.5, 0.6, 0.7], [0.7, 0.8, 0.9]], [[0.3, 0.1, 0.4], [0.4, 0.5, 0.6], [0.5, 0.6, 0.1]]]) 现在我想以这种方式获取元素: [[0.1, 0.3], [0.2, 0.1], [0.3, 0.4], [0.5, 0.4], [0.6, 0.
import numpy as np
train_predicteds = np.asarray([
[[0.1, 0.2, 0.3], [0.5, 0.6, 0.7], [0.7, 0.8, 0.9]],
[[0.3, 0.1, 0.4], [0.4, 0.5, 0.6], [0.5, 0.6, 0.1]]])
现在我想以这种方式获取元素:
[[0.1, 0.3], [0.2, 0.1], [0.3, 0.4],
[0.5, 0.4], [0.6, 0.5], [0.7, 0.6],
[0.7, 0.5], [0.8, 0.6], [0.9, 0.1]]
我找到的某种解决方案是使用以下两行代码:
aux = [item[0] for item in train_predicteds]
x = [item[0] for item in aux]
这使得我x等于
[0.10000000000000001, 0.30000000000000001]
但是我不能把这两行合并成一行,有可能吗?还是有更好的肾盂疗法
谢谢大家更好的Pythonic解决方案
>>> train_predicteds[:,0,0]
array([0.1, 0.3])
您可以通过简单的循环理解来实现这一点:
import numpy as np
train_predicteds = np.asarray([
[[0.1, 0.2, 0.3], [0.5, 0.6, 0.7], [0.7, 0.8, 0.9]],
[[0.3, 0.1, 0.4], [0.4, 0.5, 0.6], [0.5, 0.6, 0.1]]])
result = [list(train_predicteds[:, i, j]) for i in range(3) for j in range(3)]
输出:
[[0.1, 0.3], [0.2, 0.1], [0.3, 0.4],
[0.5, 0.4], [0.6, 0.5], [0.7, 0.6],
[0.7, 0.5], [0.8, 0.6], [0.9, 0.1]]
更新:
谢谢你指出这一点
或者,如果您更喜欢更广义的形式:
result = [list(train_predicteds[:, i, j]) for i in range(len(train_predicteds[0])) for j in range(len(train_predicteds[0, 0]))]
首先是:
In [17]: arr = np.asarray([
...: [[0.1, 0.2, 0.3], [0.5, 0.6, 0.7], [0.7, 0.8, 0.9]],
...: [[0.3, 0.1, 0.4], [0.4, 0.5, 0.6], [0.5, 0.6, 0.1]]])
In [18]: arr
Out[18]:
array([[[0.1, 0.2, 0.3],
[0.5, 0.6, 0.7],
[0.7, 0.8, 0.9]],
[[0.3, 0.1, 0.4],
[0.4, 0.5, 0.6],
[0.5, 0.6, 0.1]]])
In [19]: arr.shape
Out[19]: (2, 3, 3)
在尝试了几个转置命令后,我得到:
In [26]: arr.transpose(1,2,0) # shape (3,3,2) moves 1st dim to end
Out[26]:
array([[[0.1, 0.3],
[0.2, 0.1],
[0.3, 0.4]],
[[0.5, 0.4],
[0.6, 0.5],
[0.7, 0.6]],
[[0.7, 0.5],
[0.8, 0.6],
[0.9, 0.1]]])
前两个尺寸可以通过“重塑”合并:
In [27]: arr.transpose(1,2,0).reshape(9,2)
Out[27]:
array([[0.1, 0.3],
[0.2, 0.1],
[0.3, 0.4],
[0.5, 0.4],
[0.6, 0.5],
[0.7, 0.6],
[0.7, 0.5],
[0.8, 0.6],
[0.9, 0.1]])
驱逐!太好了谢谢你,迈洛德!OP可能想要一些更一般的东西,比如
result=[list(train_predicteds[:,x,y])用于范围内的x(len(train_predicteds)+1)用于范围内的y(len(train_predicteds[0])]
,但这个输出是干净的!干得好。@Reedinationer你说得对。但根据我的经验,通常解决具体问题的直接答案是wanted@Reedinationer,您的解决方案与此输入有问题。据预测,列车将被预测为np.Nararararararararararararararararararararararararararararararararararararararay([…[[0.1,0.1,0.1,0.0.1,0.1,0.2,0.2,0.2,0.2,0.2,0.6,0.6,0.6,0.6,0.7,0.7,0.8,0.8,0.8,0.8,0.9]],,[np.3,0.3,0.1,0.1,0.1,0.1,0.1,0.1,0.1,0.1,0,0.1,0,0.1,0.1,0.1,0.1,0.1,0.1,0.1,0.1,0.1,0.1,0.1,0.3,0.1,0.4],[0.4,0.5,0.6],[0.5,0.6,0.1]])@Reedinationer谢谢,我修复了你答案中的小问题,并将其添加到了我的问题中。我认为OP试图从他的第二个代码块中重新创建整个数组,但在如何将他的算法从计算一项扩展到完整项时,他被难住了。也许我误解了,我能用我的“一种解决方案”来重构元素,但我想要一些更时尚的东西。@加布里埃尔佩利格罗,你应该考虑接受HPAULJ解决方案,而不是比这里的其他2个答案更“数字”。