![](/img/trans.png)
[英]Select certain rows (condition met), but only some columns in Python/Numpy
[英]python, numpy, select rows, columns
有 numpy 数组,1000 行,1000cols: a=np.array([[1, 2,3,4,5,6,7,8,9,...,1000],[1, 2,3,4,5,6,7,8,9,...,1000],[1, 2,3,4,5,6,7,8,9,...,1000],...,[1, 2,3,4,5,6,7,8,9,...,1000]])
如何通过在此描述中选择行和列来获取a
数组:选择行索引的整行:0:2、4:7、101和156:989; 并选择列索引的完整列:0:3、400:589、678、701:999。
编辑、扩展行和列到 1000 行、1000 列,以及扩展行和列选择条件。
你好! 外面的任何人! 请帮忙解决。 或者,请告诉 numpy 开发人员让事情变得简单? 选择像这里的问题这样的多个行列段是常见且合理的任务。 请制定一个高效简洁的解决方案。
(难以置信。假设 numpy 有这么多思想头脑,而这项任务是空的?难以置信。哪一个对生产力、消极性或积极性更“有帮助”?)
如果您可以提供一个更简单的示例来说明您所假装的内容,并提供输入和期望结果的清晰示例,那将很有帮助。 据我了解,您的问题归结为以这样一种方式对数组进行切片,即它具有独立的行和范围,这是它的关键。 虽然我无法在 NumPy 中弄清楚,但 Pandas 使用df.iloc
完美地处理了它。
注意:如果您正在寻找分别选择完整列和完整行,除非您的行切片等于列切片,否则它将无法工作,因为形状不同(x 行,1000 列)(1000 行,y 列)。 如果您只关心这些值,我会在下面留下一个解决方案。 df.append
只是将数组堆叠在一起( .T
转置数组,使两者都有 1000 列)
回答你的问题:
import numpy as np
import pandas as pd
a = np.arange(1,1000*1000+1).reshape(1000,1000)
sliced_a= (pd.DataFrame(a).iloc[
[*range(0,2),*range(4,7),*range(156,989),101],
[*range(0,3),*range(400,589),*range(701,999),678]
]).values
# Note Solution
pd.DataFrame(a).iloc[
[*range(0,2),*range(4,7),*range(156,989),101],:].append(pd.DataFrame(a).iloc[
:,[*range(0,3),*range(400,589),*range(701,999),678]].T).values
虽然它不如切片语法那么简洁,但它确实有效。 本质上,我们正在解包范围,从而创建了我们想要选择的长整数列表。 df.iloc
正是您所期望的,但只接受切片或整数列表。
最后,有适当的方法和方法来请求功能和扩展开源社区在 NumPy 等模块中所做的已经很出色的工作。 花一点时间感谢那些努力工作并不断推动可能的人。 快乐编码!
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.