繁体   English   中英

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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM