kin*_*hen 46 python indexing numpy vectorization
i=np.arange(1,4,dtype=np.int)
a=np.arange(9).reshape(3,3)
Run Code Online (Sandbox Code Playgroud)
和
a
>>>array([[0, 1, 2],
[3, 4, 5],
[6, 7, 8]])
a[:,0:1]
>>>array([[0],
[3],
[6]])
a[:,0:2]
>>>array([[0, 1],
[3, 4],
[6, 7]])
a[:,0:3]
>>>array([[0, 1, 2],
[3, 4, 5],
[6, 7, 8]])
Run Code Online (Sandbox Code Playgroud)
现在我想对数组进行矢量化以将它们一起打印出来.我试试
a[:,0:i]
Run Code Online (Sandbox Code Playgroud)
要么
a[:,0:i[:,None]]
Run Code Online (Sandbox Code Playgroud)
它给出了TypeError:只有整数标量数组可以转换为标量索引
use*_*818 23
我在冒险使用 numpy.concatenate 来模拟 C++ 时遇到了这个问题,比如 2D 向量的推回;如果 A 和 B 是两个 2D numpy.arrays,则 numpy.concatenate(A,B) 会产生错误。
解决方法是简单地添加缺少的括号: numpy.concatenate( ( A,B ) ),这是必需的,因为要连接的数组构成单个参数
Max*_*xim 21
简短回答:
[a[:,:j] for j in i]
Run Code Online (Sandbox Code Playgroud)
你要做的不是一个可矢量化的操作.维基百科将矢量化定义为单个数组上的批处理操作,而不是单个标量:
在计算机科学中,阵列编程语言(也称为向量或多维语言)概括了对标量的操作,以透明地应用于向量,矩阵和更高维数组.
...
...对整个数组进行操作的操作可称为矢量化操作...
"矢量化"(简化)是重写循环的过程,因此它不是处理数组的单个元素N次,而是同时处理(比如说)阵列的4个元素N/4次.
与你的情况的问题是,每个人操作的结果有不同的形状:(3, 1),(3, 2)和(3, 3).它们不能形成单个矢量化操作的输出,因为输出必须是一个连续的数组.当然,它可以包含(3, 1),(3, 2)并在其中包含(3, 3)数组(作为视图),但这就是原始数组a已经完成的工作.
你真正想要的只是一个计算所有这些的表达式:
[a[:,:j] for j in i]
Run Code Online (Sandbox Code Playgroud)
...但它在性能优化方面没有矢量化.在引擎盖下,它是一个普通的旧for循环,逐个计算每个项目.
这可能与这个特定问题无关,但是我遇到了一个类似的问题,其中我在Python列表上使用了NumPy索引,并且得到了相同的错误消息:
# incorrect
weights = list(range(1, 129)) + list(range(128, 0, -1))
mapped_image = weights[image[:, :, band]] # image.shape = [800, 600, 3]
# TypeError: only integer scalar arrays can be converted to a scalar index
Run Code Online (Sandbox Code Playgroud)
事实证明weights,在应用多维NumPy索引之前,我需要将一维Python列表转换为NumPy数组。以下代码有效:
# correct
weights = np.array(list(range(1, 129)) + list(range(128, 0, -1)))
mapped_image = weights[image[:, :, band]] # image.shape = [800, 600, 3]
Run Code Online (Sandbox Code Playgroud)
您可以使用 numpy.ravel 从 n 维数组返回扁平数组:
>>> a
array([[0, 1, 2],
[3, 4, 5],
[6, 7, 8]])
>>> a.ravel()
array([0, 1, 2, 3, 4, 5, 6, 7, 8])
Run Code Online (Sandbox Code Playgroud)
我遇到了类似的问题并使用列表解决了它...不确定这是否有帮助
classes = list(unique_labels(y_true, y_pred))
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
208448 次 |
| 最近记录: |