Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 可以使用字符串访问numpy数组吗?_Python_Arrays_Numpy - Fatal编程技术网

Python 可以使用字符串访问numpy数组吗?

Python 可以使用字符串访问numpy数组吗?,python,arrays,numpy,Python,Arrays,Numpy,我有一张这样的桌子: 我希望在python中像这样访问它 table["Water"]["Rice"] = 3 numpy.ndarray是否可以这样做?假设您创建的源numpy数组为: arr = np.array([[1, 3, 1], [2, 5, 3], [5, 6, 7]]) 但是“普通”Numpy数组没有“符号”索引(名称)。 它们只有整数索引,从0开始的每个维度 您可以在N

我有一张这样的桌子:

我希望在python中像这样访问它

table["Water"]["Rice"] = 3

numpy.ndarray是否可以这样做?

假设您创建的源numpy数组为:

arr = np.array([[1, 3, 1],
                [2, 5, 3],
                [5, 6, 7]])
但是“普通”Numpy数组没有“符号”索引(名称)。 它们只有整数索引,从0开始的每个维度

您可以在Numpy中定义所谓的结构化数组,但它们 仅允许在一行中使用符号名称。 这样的数组由行(由整数索引索引)和 每行都是命名字段的集合。 但是您需要行和列的符号名,所以Numpy 结构化阵列不是您的选择

在我看来,唯一合理的选择是使用pandasonic DataFrames,其中列和行都可以有符号名

大熊猫:

  • 索引是每行的“名称”集合
  • 列实际上也是一个索引,但它保持不变 列的名称
要从上述Numpy阵列创建数据帧,您可以运行,例如:

# Names of columns and rows (the same)
names = ['Water', 'Rice', 'Sauce']
# Actual creation of a DataFrame
table = pd.DataFrame(arr, index=names, columns=names)
其内容是:

       Water  Rice  Sauce
Water      1     3      1
Rice       2     5      3
Sauce      5     6      7
要从该数据帧读取元素,您可以使用您的代码,即:

table['Water']['Rice']
在上述代码中:

  • 水(第一个索引)是一个列名
  • Rice(第二个索引)是行索引(名称)
所以读取的值是2

但访问数据帧元素的一种更为泛泛的方式是:

table.loc['Water', 'Rice']
但这次:

  • 水(第一个索引)是一个行索引
  • Rice(第二个索引)是一个列名
所以读取的值是3

您还可以在指定的单元格中保存新值,例如:

table.loc['Water', 'Rice'] = 12
现在,当您打印(表格)时,结果是:

       Water  Rice  Sauce
Water      1    12      1
Rice       2     5      3
Sauce      5     6      7
如果您在此数据帧(表)上执行一些操作,但您希望 要将其与其他代码集成,需要使用Numpy数组 (不是数据帧),可以通过以下方式传递:

table.values
i、 e.传递基础Numpy数组

但是,您可以仅使用
整数索引。

假设您将源Numpy数组创建为:

arr = np.array([[1, 3, 1],
                [2, 5, 3],
                [5, 6, 7]])
但是“普通”Numpy数组没有“符号”索引(名称)。 它们只有整数索引,从0开始的每个维度

您可以在Numpy中定义所谓的结构化数组,但它们 仅允许在一行中使用符号名称。 这样的数组由行(由整数索引索引)和 每行都是命名字段的集合。 但是您需要行和列的符号名,所以Numpy 结构化阵列不是您的选择

在我看来,唯一合理的选择是使用pandasonic DataFrames,其中列和行都可以有符号名

大熊猫:

  • 索引是每行的“名称”集合
  • 列实际上也是一个索引,但它保持不变 列的名称
要从上述Numpy阵列创建数据帧,您可以运行,例如:

# Names of columns and rows (the same)
names = ['Water', 'Rice', 'Sauce']
# Actual creation of a DataFrame
table = pd.DataFrame(arr, index=names, columns=names)
其内容是:

       Water  Rice  Sauce
Water      1     3      1
Rice       2     5      3
Sauce      5     6      7
要从该数据帧读取元素,您可以使用您的代码,即:

table['Water']['Rice']
在上述代码中:

  • 水(第一个索引)是一个列名
  • Rice(第二个索引)是行索引(名称)
所以读取的值是2

但访问数据帧元素的一种更为泛泛的方式是:

table.loc['Water', 'Rice']
但这次:

  • 水(第一个索引)是一个行索引
  • Rice(第二个索引)是一个列名
所以读取的值是3

您还可以在指定的单元格中保存新值,例如:

table.loc['Water', 'Rice'] = 12
现在,当您打印(表格)时,结果是:

       Water  Rice  Sauce
Water      1    12      1
Rice       2     5      3
Sauce      5     6      7
如果您在此数据帧(表)上执行一些操作,但您希望 要将其与其他代码集成,需要使用Numpy数组 (不是数据帧),可以通过以下方式传递:

table.values
i、 e.传递基础Numpy数组

但是,您可以仅使用
整数指数。

你所说的
表是什么意思?Python中没有这样的对象类(或者
numpy
),它基本上是一个字典。数组有索引,字典有键。索引只能是整数,键可以是任何类型。它们是两种不同的数据结构。简短的回答是不。你可能想试试熊猫。。。无论如何,这不是一个明确的问题,请尝试以更具体的方式添加输入…您所说的
是什么意思?Python中没有这样的对象类(或者
numpy
),它基本上是一个字典。数组有索引,字典有键。索引只能是整数,键可以是任何类型。它们是两种不同的数据结构。简短的回答是不。你可能想试试熊猫。。。无论如何,这不是一个明确的问题,请尝试以更具体的方式添加输入…谢谢您的回答。我遇到了Numpy的结构化数组。但是我不太明白。谢谢你的解释。熊猫看起来很有趣。我现在用另一种方法解决了它。我创建了自己的类“my_array”,它基本上是一个numpy.ndarray。我重写了“getitem”和“setitem”以在字典中查找给定的字符串(string->int),并使用此int在ndarray中获取/保存值并返回它。我可以随心所欲地使用这个类。但我不确定这是否是一个性能方面的好解决方案。你觉得呢?大家都知道Numpy的运行速度比熊猫快,这对大型阵列尤其重要。您可以比较两个版本的执行时间,例如使用%timeit。也许你的解决方案会更快?试试看,谢谢你的回答。我遇到了Numpy的结构化数组。但是我不太明白。谢谢你的解释。熊猫看起来很有趣。我现在用另一种方法解决了它。我创建了自己的类“my_array”,它基本上是一个numpy.ndarray。我重写了“getitem”和“setitem”以在字典中查找给定的字符串(string->int),并使用此int获取/保存t