我想创建一个二维的numpy数组。
我试过了:
import numpy as np
result = np.empty
np.append(result, [1, 2, 3])
np.append(result, [4, 5, 9])
1.数组的维度为:(2, 3)
。我怎么能得到它们?
我试过了:
print(np.shape(result))
print(np.size(result))
但这会打印出来:
()
1
2.如何访问数组中的特定元素?
我试过了:
print(result.item((1, 2)))
但是这会回来:
Traceback (most recent call last):
File "python", line 10, in <module>
AttributeError: 'builtin_function_or_method' object has no attribute 'item'
答案 0 :(得分:3)
理想情况下,您应该在交互式会话中测试此类代码,您可以在其中轻松获取有关步骤的更多信息。我将在ipython
中进行说明。
In [1]: result = np.empty
In [2]: result
Out[2]: <function numpy.core.multiarray.empty>
这是一个函数,而不是数组。正确使用是result = np.empty((3,))
。那就是你必须用所需的大小参数调用函数。
In [3]: np.append(result, [1,2,3])
Out[3]: array([<built-in function empty>, 1, 2, 3], dtype=object)
append
已创建一个数组,但请查看内容 - 函数和3个数字。和dtype
。 np.append
也会返回结果。它不能就地工作。
In [4]: result.item((1,2))
---------------------------------------------------------------------------
AttributeError Traceback (most recent call last)
<ipython-input-4-51f2b4be4f43> in <module>()
----> 1 result.item((1,2))
AttributeError: 'builtin_function_or_method' object has no attribute 'item'
您的错误告诉我们result
是一个函数,而不是一个数组。你在一开始就设定了同样的东西。
In [5]: np.shape(result)
Out[5]: ()
In [6]: np.array(result)
Out[6]: array(<built-in function empty>, dtype=object)
在这种情况下,np.shape
和np.size
的函数版本不具有诊断功能,因为它们首先将result
转换为数组。 result.shape
会出错。
潜在的问题是您使用的是列表模型
result = []
result.append([1,2,3])
result.append([4,5,6])
但是数组append
被错误命名并被滥用。它只是np.concatenate
的前端。如果您不理解concatenate
,则可能不会使用np.append
。事实上,我认为你根本不应该使用np.append
。
使用append的正确方法是从大小为0的数组开始,并重用结果:
In [7]: result = np.empty((0,3),int)
In [8]: result
Out[8]: array([], shape=(0, 3), dtype=int32)
In [9]: result = np.append(result,[1,2,3])
In [10]: result
Out[10]: array([1, 2, 3])
In [11]: result = np.append(result,[4,5,6])
In [12]: result
Out[12]: array([1, 2, 3, 4, 5, 6])
但也许这不是你想要的?即使我在滥用append
。
回到绘图板:
In [15]: result = []
In [16]: result.append([1,2,3])
In [17]: result.append([4,5,6])
In [18]: result
Out[18]: [[1, 2, 3], [4, 5, 6]]
In [19]: result = np.array(result)
In [20]: result
Out[20]:
array([[1, 2, 3],
[4, 5, 6]])
使用真实数组,您的item
表达式有效,但通常我们使用[]
索引:
In [21]: result[1,2]
Out[21]: 6
In [22]: result.item((1,2))
Out[22]: 6
np.append
的源代码(请注意使用np.concatenate
):
In [23]: np.source(np.append)
In file: /usr/local/lib/python3.5/dist-packages/numpy/lib/function_base.py
def append(arr, values, axis=None):
"""
...
"""
arr = asanyarray(arr)
if axis is None:
if arr.ndim != 1:
arr = arr.ravel()
values = ravel(values)
axis = arr.ndim-1
return concatenate((arr, values), axis=axis)
答案 1 :(得分:1)